System.Xml Przestrzeń nazw
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia opartą na standardach obsługę przetwarzania kodu XML.
Klasy
NameTable |
Implementuje jednowątkowy XmlNameTableelement . |
UniqueId |
Unikatowy identyfikator zoptymalizowany pod kątem identyfikatorów GUID. |
XmlAttribute |
Reprezentuje atrybut. Prawidłowe i domyślne wartości atrybutu są określane w definicji typu dokumentu (DTD) lub schemacie. |
XmlAttributeCollection |
Reprezentuje kolekcję atrybutów, do których można uzyskać dostęp według nazwy lub indeksu. |
XmlBinaryReaderSession |
Umożliwia dynamiczne zarządzanie ciągami zoptymalizowanymi. |
XmlBinaryWriterSession |
Umożliwia używanie słownika dynamicznego do kompresowania typowych ciągów wyświetlanych w komunikacie i utrzymania stanu. |
XmlCDataSection |
Reprezentuje sekcję CDATA. |
XmlCharacterData |
Udostępnia metody manipulowania tekstem, które są używane przez kilka klas. |
XmlComment |
Reprezentuje zawartość komentarza XML. |
XmlConvert |
Koduje i dekoduje nazwy XML oraz udostępnia metody konwertowania między typami środowiska uruchomieniowego i typami języka definicji schematu XML (XSD). Podczas konwertowania typów danych zwracane wartości są niezależne od ustawień regionalnych. |
XmlDataDocument |
Umożliwia przechowywanie, pobieranie i manipulowanie danymi ustrukturyzowanymi za pomocą relacyjnej DataSetmetody . |
XmlDeclaration |
Reprezentuje węzeł <deklaracji XML ?xml version='1.0'...?>. |
XmlDictionary |
Implementuje słownik używany do optymalizowania implementacji czytania/zapisywania XML programu Windows Communication Foundation (WCF). |
XmlDictionaryReader |
|
XmlDictionaryReaderQuotas |
Zawiera konfigurowalne wartości przydziału dla elementu XmlDictionaryReaders. |
XmlDictionaryString |
Reprezentuje wpis przechowywany w obiekcie XmlDictionary. |
XmlDictionaryWriter |
Reprezentuje abstrakcyjną klasę, z XmlWriter którą pochodzi program Windows Communication Foundation (WCF) do serializacji i deserializacji. |
XmlDocument |
Reprezentuje dokument XML. Ta klasa umożliwia ładowanie, weryfikowanie, edytowanie, dodawanie i pozycjonowanie kodu XML w dokumencie. |
XmlDocumentFragment |
Reprezentuje lekki obiekt, który jest przydatny w przypadku operacji wstawiania drzewa. |
XmlDocumentType |
Reprezentuje deklarację typu dokumentu. |
XmlDocumentXPathExtensions |
Udostępnia metody rozszerzenia dla XmlDocument elementów i XmlNode na potrzeby nawigacji po dokumentach. |
XmlElement |
Reprezentuje element. |
XmlEntity |
Reprezentuje deklarację jednostki, taką jak <! JEDNOSTKA... >. |
XmlEntityReference |
Reprezentuje węzeł odwołania do jednostki. |
XmlException |
Zwraca szczegółowe informacje o ostatnim wyjątku. |
XmlImplementation |
Definiuje kontekst zestawu XmlDocument obiektów. |
XmlLinkedNode |
Pobiera węzeł bezpośrednio poprzedzający ten węzeł lub następujący po tym węźle. |
XmlNamedNodeMap |
Reprezentuje kolekcję węzłów, do których można uzyskać dostęp według nazwy lub indeksu. |
XmlNamespaceManager |
Rozpoznaje, dodaje i usuwa przestrzenie nazw do kolekcji oraz zapewnia zarządzanie zakresem dla tych przestrzeni nazw. |
XmlNameTable |
Tabela obiektów ciągów atomizowanego. |
XmlNode |
Reprezentuje jeden węzeł w dokumencie XML. |
XmlNodeChangedEventArgs |
Dostarcza dane dla zdarzeń NodeChanged, , NodeInsertedNodeChanging, NodeRemovedNodeInsertingi NodeRemoving . |
XmlNodeList |
Reprezentuje uporządkowaną kolekcję węzłów. |
XmlNodeReader |
Reprezentuje czytnik, który zapewnia szybki, niebuforowany dostęp tylko do danych XML w obiekcie XmlNode. |
XmlNotation |
Reprezentuje deklarację notacji, taką jak <! NOTACJA... >. |
XmlParserContext |
Udostępnia wszystkie informacje kontekstowe wymagane przez element XmlReader , aby przeanalizować fragment XML. |
XmlProcessingInstruction |
Reprezentuje instrukcję przetwarzania, którą kod XML definiuje w celu zachowania informacji specyficznych dla procesora w tekście dokumentu. |
XmlQualifiedName |
Reprezentuje kwalifikowaną nazwę XML. |
XmlReader |
Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przodu dostęp do danych XML. |
XmlReaderSettings |
Określa zestaw funkcji do obsługi dla XmlReader obiektu utworzonego przez metodę Create . |
XmlResolver |
Rozpoznaje zewnętrzne zasoby XML określane przez identyfikator URI (Uniform Resource Identifier). |
XmlSecureResolver |
Pomaga zabezpieczyć kolejną implementację XmlResolver programu przez opakowywanie XmlResolver obiektu i ograniczanie zasobów, do których podstawowy XmlResolver obiekt ma dostęp. |
XmlSignificantWhitespace |
Reprezentuje białe znaki między znacznikami w węźle zawartości mieszanej lub biały znak w zakresie xml:space= 'preserve'. Jest to również nazywane istotnym białym znakiem. |
XmlText |
Reprezentuje zawartość tekstową elementu lub atrybutu. |
XmlTextReader |
Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przodu dostęp do danych XML. Począwszy od .NET Framework 2.0, zalecamy użycie XmlReader klasy . |
XmlTextWriter |
Reprezentuje moduł zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików zawierających dane XML zgodne z językiem W3C Extensible Markup Language (XML) 1.0 i przestrzeniami nazw w zaleceniach XML. Począwszy od .NET Framework 2.0, zalecamy użycie XmlWriter klasy . |
XmlUrlResolver |
Rozpoznaje zewnętrzne zasoby XML określane przez identyfikator URI (Uniform Resource Identifier). |
XmlValidatingReader |
Reprezentuje czytelnika, który udostępnia schemat definicji typu dokumentu (DTD), XML-Data zredukowany (XDR) i walidację języka definicji schematu XML (XSD). Ta klasa jest przestarzała. Począwszy od .NET Framework 2.0, zalecamy użycie XmlReaderSettings klasy i Create metody do utworzenia modułu sprawdzania poprawności czytnika XML. |
XmlWhitespace |
Biały znak w zawartości elementu. |
XmlWriter |
Reprezentuje moduł zapisywania, który zapewnia szybki, niebuforowany, tylko do przodu sposób generowania strumieni lub plików zawierających dane XML. |
XmlWriterSettings |
Określa zestaw funkcji do obsługi dla XmlWriter obiektu utworzonego przez metodę Create . |
XmlXapResolver |
Typ XmlXapResolver służy do rozpoznawania zasobów w pakiecie XAP aplikacji Silverlight. |
Interfejsy
IApplicationResourceStreamResolver |
Reprezentuje program rozpoznawania strumienia zasobów aplikacji. |
IFragmentCapableXmlDictionaryWriter |
Zawiera właściwości i metody, które po zaimplementowaniu przez element XmlDictionaryWriterumożliwiają przetwarzanie fragmentów XML. |
IHasXmlNode |
Umożliwia klasie zwracanie elementu XmlNode z bieżącego kontekstu lub położenia. |
IStreamProvider |
Reprezentuje interfejs, który można zaimplementować przez klasy dostarczające strumienie. |
IXmlBinaryReaderInitializer |
Udostępnia metody ponownego inicjowania czytnika binarnego w celu odczytania nowego dokumentu. |
IXmlBinaryWriterInitializer |
Określa wymagania implementacji dla składników zapisywania danych binarnych XML, które pochodzą z tego interfejsu. |
IXmlDictionary |
Element |
IXmlLineInfo |
Udostępnia interfejs umożliwiający klasom zwracanie informacji o linii i położeniu. |
IXmlMtomReaderInitializer |
Określa wymagania implementacji dla czytników MTOM XML, które pochodzą z tego interfejsu. |
IXmlMtomWriterInitializer |
Po zaimplementowaniu przez moduł zapisywania MTOM ten interfejs zapewnia inicjowanie modułu zapisywania MTOM. |
IXmlNamespaceResolver |
Zapewnia dostęp tylko do odczytu do zestawu mapowań prefiksów i przestrzeni nazw. |
IXmlTextReaderInitializer |
Określa wymagania implementacji dla czytników tekstu XML, które pochodzą z tego interfejsu. |
IXmlTextWriterInitializer |
Określa wymagania implementacji dla składników zapisywania tekstu XML, które pochodzą z tego interfejsu. |
Wyliczenia
ConformanceLevel |
Określa ilość danych wejściowych lub wyjściowych sprawdzania, czy XmlReader i XmlWriter obiekty są wykonywane. |
DtdProcessing |
Określa opcje przetwarzania dtd. Wyliczenie DtdProcessing jest używane przez klasę XmlReaderSettings . |
EntityHandling |
Określa sposób XmlTextReader obsługi jednostek lub XmlValidatingReader . |
Formatting |
Określa opcje formatowania dla .XmlTextWriter |
NamespaceHandling |
Określa, czy usunąć zduplikowane deklaracje przestrzeni nazw w obiekcie XmlWriter. |
NewLineHandling |
Określa sposób obsługi podziałów wierszy. |
ReadState |
Określa stan czytnika. |
ValidationType |
Określa typ weryfikacji do wykonania. |
WhitespaceHandling |
Określa sposób obsługi odstępu. |
WriteState |
Określa stan .XmlWriter |
XmlDateTimeSerializationMode |
Określa sposób traktowania wartości czasu podczas konwertowania między ciągiem a DateTime. |
XmlDictionaryReaderQuotaTypes |
Wylicza konfigurowalne wartości przydziału dla elementów XmlDictionaryReaders. |
XmlNamespaceScope |
Definiuje zakres przestrzeni nazw. |
XmlNodeChangedAction |
Określa typ zmiany węzła. |
XmlNodeOrder |
Opisuje kolejność dokumentu węzła w porównaniu z drugim węzłem. |
XmlNodeType |
Określa typ węzła. |
XmlOutputMethod |
Określa metodę używaną do serializacji danych wyjściowych XmlWriter . |
XmlSpace |
Określa bieżący |
XmlTokenizedType |
Reprezentuje typ XML ciągu. Dzięki temu ciąg może być odczytywany jako określony typ XML, na przykład typ sekcji CDATA. |
Delegaci
OnXmlDictionaryReaderClose |
|
XmlNodeChangedEventHandler |
Reprezentuje metodę, która obsługuje NodeChangedzdarzenia , NodeChanging, NodeInserted, NodeRemovedNodeInsertingi NodeRemoving . |
Uwagi
Obsługiwane standardy
System.Xml Przestrzeń nazw obsługuje następujące standardy:
Przestrzenie nazw XML, zarówno na poziomie strumienia, jak i MODELU DOM
Zobacz sekcję Różnice w specyfikacji W3C dla dwóch przypadków, w których klasy XML różnią się od zaleceń W3C.
Powiązane przestrzenie nazw
Platforma .NET udostępnia również inne przestrzenie nazw dla operacji związanych z xml. Aby uzyskać listę, opisy i linki, zobacz System.Xml Przestrzenie nazw.
Asynchroniczne przetwarzanie kodu XML
Klasy System.Xml.XmlReader i System.Xml.XmlWriter obejmują szereg metod asynchronicznych opartych na modelu programowania asynchronicznego. Metody te można zidentyfikować za pomocą ciągu "Async" na końcu ich nazw. Za pomocą tych metod można napisać kod asynchroniczny podobny do kodu synchronicznego, a istniejący kod synchroniczny można łatwo migrować do kodu asynchronicznego.
Użyj metod asynchronicznych w aplikacjach, w których występuje znaczne opóźnienie strumienia sieci. Unikaj używania asynchronicznych interfejsów API dla strumienia pamięci lub lokalnych operacji odczytu/zapisu strumienia plików. Strumień wejściowy , XmlTextReaderi XmlTextWriter powinien również obsługiwać operacje asynchroniczne. W przeciwnym razie wątki będą nadal blokowane przez operacje we/wy.
Nie zalecamy mieszania synchronicznych i asynchronicznych wywołań funkcji, ponieważ można zapomnieć o użyciu słowa kluczowego lub użyć synchronicznego interfejsu
await
API, w którym jest to konieczne asynchroniczne.Nie ustawiaj flagi XmlReaderSettings.Async
true
lub XmlWriterSettings.Async na , jeśli nie zamierzasz używać metody asynchronicznej.Jeśli zapomnisz określić
await
słowo kluczowe podczas wywoływania metody asynchronicznej, wyniki są niedeterministyczne: Możesz otrzymać oczekiwany wynik lub wyjątek.XmlReader Gdy obiekt odczytuje duży węzeł tekstowy, może buforować tylko częściową wartość tekstową i zwracać węzeł tekstowy, więc pobieranie XmlReader.Value właściwości może zostać zablokowane przez operację we/wy. XmlReader.GetValueAsync Użyj metody , aby pobrać wartość tekstową w trybie asynchronicznym lub użyć XmlReader.ReadValueChunkAsync metody , aby odczytać duży blok tekstowy we fragmentach.
W przypadku używania XmlWriter obiektu wywołaj metodę XmlWriter.FlushAsync przed wywołaniem XmlWriter.Close metody , aby uniknąć blokowania operacji we/wy.
Różnice w specyfikacji W3C
W dwóch przypadkach, które obejmują ograniczenia dotyczące składników schematu grupy modeli, System.Xml przestrzeń nazw różni się od zaleceń W3C.
Spójność w deklaracjach elementów:
W niektórych przypadkach, gdy są używane grupy podstawień, System.Xml implementacja nie spełnia wymagań "Ograniczenie składnika schematu: deklaracje elementów spójne", który jest opisany w sekcji Ograniczenia składników schematu grupy modeli specyfikacji W3C.
Na przykład poniższy schemat zawiera elementy o tej samej nazwie, ale różne typy w tym samym modelu zawartości, a używane są grupy podstawień. Powinno to spowodować błąd, ale System.Xml kompiluje i weryfikuje schemat bez błędów.
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="t1"/>
<xs:complexType name="t1"/>
<xs:element name="e2" type="t2" substitutionGroup="e1"/>
<xs:complexType name="t2">
<xs:complexContent>
<xs:extension base="t1">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1"/>
<xs:element name="e2" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
W tym schemacie typ t3
zawiera sekwencję elementów. Ze względu na podstawianie odwołanie do elementu e1
z sekwencji może spowodować element e1
typu t1
lub w elemencie e2
typu t2
. Ten ostatni przypadek byłby wynikiem sekwencji dwóch e2
elementów, gdzie jeden jest typu t2
, a drugi jest typu xs:int
.
Unikatowe przypisywanie cząstek:
W następujących warunkach implementacja System.Xml nie spełnia wymagań "Ograniczenie składnika schematu: Unikatowe przypisanie cząstek", które opisano w sekcji Ograniczenia dotyczące składników schematu grupy modeli specyfikacji W3C.
Jeden z elementów w grupie odwołuje się do innego elementu.
Odwoływający się element jest elementem głównym grupy podstawiania.
Grupa podstawienia zawiera element, który ma taką samą nazwę jak jeden z elementów w grupie.
Kardynalność elementu odwołującego się do elementu head grupy podstawień i elementu o takiej samej nazwie jak element grupy podstawień nie jest stały (minOccurs maxOccurs < ).
Definicja elementu odwołującego się do grupy podstawienia poprzedza definicję elementu o tej samej nazwie co element grupy podstawienia.
Na przykład w schemacie poniżej modelu zawartości jest niejednoznaczny i powinien powodować błąd kompilacji, ale System.Xml kompiluje schemat bez błędów.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:int"/>
<xs:element name="e2" type="xs:int" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
Jeśli spróbujesz zweryfikować następujący kod XML względem powyższego schematu, weryfikacja zakończy się niepowodzeniem z następującym komunikatem: "Element "e3" ma nieprawidłowy element podrzędny "e2", a XmlSchemaValidationException wyjątek zostanie zgłoszony.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
Aby obejść ten problem, możesz zamienić deklaracje elementów w dokumencie XSD. Przykład:
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
staje się następująca:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Oto inny przykład tego samego problemu:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="e1" type="xs:string"/>
<xs:element name="e2" type="xs:string" substitutionGroup="e1"/>
<xs:complexType name="t3">
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e3" type="t3"/>
</xs:schema>
Jeśli spróbujesz zweryfikować następujący kod XML względem powyższego schematu, weryfikacja zakończy się niepowodzeniem z powodu następującego wyjątku: "Nieobsługiwany wyjątek: System.Xml. Schema.XmlSchemaValidationException: Element el "e2" jest nieprawidłowy — wartość "abc" jest nieprawidłowa zgodnie z jego typem 'http://www.w3.org/2001/XMLSchema:int'
danych — ciąg "abc" nie jest prawidłową wartością Int32".
<e3><e2>abc</e2></e3>
Zagadnienia dotyczące bezpieczeństwa
Typy i elementy członkowskie w System.Xml przestrzeni nazw opierają się na systemie zabezpieczeń platformy .NET. W poniższych sekcjach omówiono problemy z zabezpieczeniami specyficzne dla technologii XML.
Należy również pamiętać, że jeśli używasz System.Xml typów i elementów członkowskich, jeśli kod XML zawiera dane, które mają potencjalne konsekwencje dla prywatności, musisz zaimplementować aplikację w sposób, który szanuje prywatność użytkowników końcowych.
Dostęp zewnętrzny
Kilka technologii XML umożliwia pobieranie innych dokumentów podczas przetwarzania. Na przykład definicja typu dokumentu (DTD) może znajdować się w analizowanym dokumencie. DtD może również znajdować się w zewnętrznym dokumencie, do którego odwołuje się analizowany dokument. Technologie definicji schematu XML (XSD) i XSLT mają również możliwość dołączania informacji z innych plików. Te zasoby zewnętrzne mogą stanowić pewne problemy z zabezpieczeniami. Na przykład należy upewnić się, że aplikacja pobiera pliki tylko z zaufanych witryn, a pobierany plik nie zawiera złośliwych danych.
Klasa XmlUrlResolver służy do ładowania dokumentów XML i rozpoznawania zasobów zewnętrznych, takich jak jednostki, DTD lub schematy, oraz importowanie lub dołączanie dyrektyw.
Możesz zastąpić tę klasę i określić XmlResolver obiekt do użycia. XmlSecureResolver Użyj klasy , jeśli musisz otworzyć zasób, którego nie kontrolujesz lub który jest niezaufany. Obiekt XmlSecureResolver opakowuje XmlResolver element i umożliwia ograniczenie zasobów, do których podstawowy XmlResolver obiekt ma dostęp.
Denial of service (odmowa usługi)
Poniższe scenariusze są uważane za mniej narażone na ataki typu "odmowa usługi", ponieważ System.Xml klasy zapewniają ochronę przed takimi atakami.
Analizowanie danych XML tekstu.
Analizowanie binarnych danych XML, jeśli dane binarne XML zostały wygenerowane przez firmę Microsoft SQL Server.
Zapisywanie dokumentów XML i fragmentów ze źródeł danych w systemie plików, strumieniach, elementach TextWriterlub StringBuilder.
Ładowanie dokumentów do obiektu Document Object Model (DOM), jeśli używasz XmlReader obiektu i XmlReaderSettings.DtdProcessing ustawiono wartość DtdProcessing.Prohibit.
Nawigowanie po obiekcie DOM.
Poniższe scenariusze nie są zalecane, jeśli obawiasz się odmowy usługi lub jeśli pracujesz w niezaufanym środowisku.
Przetwarzanie DTD.
Przetwarzanie schematu. Obejmuje to dodawanie niezaufanego schematu do kolekcji schematów, kompilowanie niezaufanego schematu i weryfikowanie przy użyciu niezaufanego schematu.
Przetwarzanie XSLT.
Analizowanie dowolnego strumienia danych binarnych XML dostarczonych przez użytkownika.
Operacje DOM, takie jak wykonywanie zapytań, edytowanie, przenoszenie pod drzew między dokumentami i zapisywanie obiektów DOM.
Jeśli martwisz się o odmowę usługi lub jeśli masz do czynienia z niezaufanymi źródłami, nie włączaj przetwarzania DTD. Jest to domyślnie wyłączone dla XmlReader obiektów tworzonych przez metodę XmlReader.Create .
Uwaga
Domyślnie XmlTextReader zezwala na przetwarzanie DTD. Użyj właściwości , XmlTextReader.DtdProcessing aby wyłączyć tę funkcję.
Jeśli masz włączone przetwarzanie DTD, możesz użyć XmlSecureResolver klasy , aby ograniczyć zasoby, do których XmlReader ma dostęp. Możesz również zaprojektować aplikację, aby przetwarzanie XML było ograniczone pamięci i czasu. Na przykład możesz skonfigurować limity czasu w aplikacji ASP.NET.
Zagadnienia dotyczące przetwarzania
Ponieważ dokumenty XML mogą zawierać odwołania do innych plików, trudno jest określić, ile mocy obliczeniowej jest wymagane do analizowania dokumentu XML. Na przykład dokumenty XML mogą zawierać dtD. Jeśli dtD zawiera zagnieżdżone jednostki lub złożone modele zawartości, analizowanie dokumentu może zająć zbyt dużo czasu.
W przypadku korzystania z programu XmlReadermożna ograniczyć rozmiar dokumentu, który można przeanalizować, ustawiając XmlReaderSettings.MaxCharactersInDocument właściwość . Możesz ograniczyć liczbę znaków, które wynikają z rozszerzania jednostek, ustawiając XmlReaderSettings.MaxCharactersFromEntities właściwość . Zapoznaj się z odpowiednimi tematami referencyjnymi, aby zapoznać się z przykładami ustawiania tych właściwości.
Technologie XSD i XSLT mają dodatkowe możliwości, które mogą mieć wpływ na wydajność przetwarzania. Na przykład istnieje możliwość skonstruowania schematu XML, który wymaga znacznego czasu na przetworzenie w przypadku oceny na stosunkowo małym dokumencie. Istnieje również możliwość osadzania bloków skryptów w arkuszu stylów XSLT. Oba przypadki stanowią potencjalne zagrożenie bezpieczeństwa aplikacji.
Podczas tworzenia aplikacji korzystającej XslCompiledTransform z klasy należy pamiętać o następujących elementach i ich implikacjach:
Wykonywanie skryptów XSLT jest domyślnie wyłączone. Skrypty XSLT powinny być włączone tylko wtedy, gdy potrzebujesz obsługi skryptów i pracujesz w w pełni zaufanym środowisku.
Funkcja XSLT
document()
jest domyślnie wyłączona. Jeśli włączyszdocument()
funkcję, ogranicz zasoby, do których można uzyskać dostęp, przekazując XmlSecureResolver obiekt do XslCompiledTransform.Transform metody .Obiekty rozszerzeń są domyślnie włączone. XsltArgumentList Jeśli obiekt zawierający obiekty rozszerzenia jest przekazywany do XslCompiledTransform.Transform metody, używane są obiekty rozszerzenia.
Arkusze stylów XSLT mogą zawierać odwołania do innych plików i osadzonych bloków skryptów. Złośliwy użytkownik może wykorzystać ten problem, podając dane lub arkusze stylów, które po wykonaniu mogą spowodować przetworzenie systemu, dopóki komputer nie będzie działać nisko na zasobach.
Aplikacje XSLT uruchamiane w środowisku zaufania mieszanego mogą powodować fałszowanie arkuszy stylów. Na przykład złośliwy użytkownik może załadować obiekt ze szkodliwym arkuszem stylów i przekazać go do innego użytkownika, który następnie wywołuje XslCompiledTransform.Transform metodę i wykonuje transformację.
Te problemy z zabezpieczeniami można rozwiązać, nie włączając skryptów ani document()
funkcji, chyba że arkusz stylów pochodzi z zaufanego źródła i nie akceptuje XslCompiledTransform obiektów, arkuszy stylów XSLT lub danych źródłowych XML z niezaufanego źródła.
Obsługa wyjątków
Wyjątki zgłaszane przez składniki niższego poziomu mogą ujawniać informacje o ścieżce, które nie mają być widoczne dla aplikacji. Aplikacje muszą przechwytywać wyjątki i przetwarzać je odpowiednio.