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
| Nazwa | Opis |
|---|---|
| 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ą definiowane 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 zoptymalizowanymi ciągami. |
| XmlBinaryWriterSession |
Umożliwia używanie słownika dynamicznego do kompresowania typowych ciągów wyświetlanych w komunikacie i konserwacji 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 języka wspólnego i typami języka 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 czytnika/zapisywania XML programu Windows Communication Foundation (WCF). |
| XmlDictionaryReader |
|
| XmlDictionaryReaderQuotas |
Zawiera konfigurowalne wartości przydziału dla elementów 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. Tej klasy można użyć do ładowania, weryfikowania, edytowania, dodawania i umieszczania 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 rozszerzeń dla XmlDocument elementu 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 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 i 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, aby przechowywać informacje specyficzne dla procesora w tekście dokumentu. |
| XmlQualifiedName |
Reprezentuje kwalifikowaną nazwę XML. |
| XmlReader |
Reprezentuje czytnik, który zapewnia szybki, niecachedowany, tylko do przekazywania dostęp do danych XML. |
| XmlReaderSettings |
Określa zestaw funkcji do obsługi obiektu XmlReader utworzonego przez metodę Create . |
| XmlResolver |
Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier). |
| XmlSecureResolver |
Pomaga zabezpieczyć kolejną implementację XmlResolver przez opakowywanie XmlResolver obiektu i ograniczanie zasobów, do których bazowe XmlResolver ma dostęp. |
| XmlSignificantWhitespace |
Reprezentuje białe znaki między znacznikami w mieszanym węźle zawartości lub białym znakiem w zakresie xml:space= "preserve". Jest to również nazywane znaczącym białym znakiem. |
| XmlText |
Reprezentuje zawartość tekstową elementu lub atrybutu. |
| XmlTextReader |
Reprezentuje czytnik, który zapewnia szybki, niebuforowany, tylko do przekazywania dostęp do danych XML. Zalecamy zamiast tego 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, które są zgodne z językiem W3C Extensible Markup Language (XML) 1.0 i przestrzeniami nazw w zaleceniach XML. Zalecamy zamiast tego użycie XmlWriter klasy . |
| XmlUrlResolver |
Rozpoznaje zewnętrzne zasoby XML nazwane przez identyfikator URI (Uniform Resource Identifier). |
| XmlValidatingReader |
Reprezentuje czytelnik, który udostępnia definicję typu dokumentu (DTD), schemat XML-Data zredukowany (XDR) i walidację języka definicji schematu XML (XSD). Ta klasa jest przestarzała. Zalecamy użycie XmlReaderSettings klasy i Create metody w celu utworzenia modułu sprawdzania poprawności czytnika XML. |
| XmlWhitespace |
Reprezentuje białe znaki 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 obiektu XmlWriter utworzonego przez metodę Create . |
| XmlXapResolver |
Typ XmlXapResolver służy do rozpoznawania zasobów w pakiecie XAP aplikacji Silverlight. |
Interfejsy
| Nazwa | Opis |
|---|---|
| IApplicationResourceStreamResolver |
Reprezentuje program rozpoznawania strumienia zasobów aplikacji. |
| IFragmentCapableXmlDictionaryWriter |
Zawiera właściwości i metody, które po zaimplementowaniu przez element XmlDictionaryWriterumożliwia 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 binarnych XML, które pochodzą z tego interfejsu. |
| IXmlDictionary |
Element |
| IXmlLineInfo |
Udostępnia interfejs umożliwiający klasę zwracania informacji o linii i pozycji. |
| 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
| Nazwa | Opis |
|---|---|
| ConformanceLevel |
Określa ilość danych wejściowych lub wyjściowych, które XmlReader i XmlWriter obiektów. |
| DtdProcessing |
Określa opcje przetwarzania dtd. Wyliczenie DtdProcessing jest używane przez klasę XmlReaderSettings. |
| EntityHandling |
Określa sposób obsługi jednostek XmlTextReader lub XmlValidatingReader. |
| Formatting |
Określa opcje formatowania dla XmlTextWriter. |
| NamespaceHandling |
Określa, czy usunąć zduplikowane deklaracje przestrzeni nazw w 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ść dokumentów 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 zakres |
| 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
| Nazwa | Opis |
|---|---|
| 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:
- XML 1.0, w tym obsługa DTD
- Przestrzenie nazw XML, zarówno na poziomie strumienia, jak i DOM
- Schematy XML
- Wyrażenia XPath
- Przekształcenia XSLT
- DOM Level 1 Core
- DOM Level 2 Core
Zobacz sekcję Różnice w specyfikacji W3C dla dwóch przypadków, w których klasy XML różnią się od zaleceń W3C.
Asynchroniczne przetwarzanie kodu XML
Klasy System.Xml.XmlReader i System.Xml.XmlWriter obejmują szereg metod asynchronicznych opartych na modelu programowania asynchronicznego. Te metody 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 sieciowego. 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 wywołań funkcji synchronicznych i asynchronicznych, ponieważ możesz zapomnieć o użyciu
awaitsłowa kluczowego lub użyć synchronicznego interfejsu API, w którym jest to konieczne.Nie ustawiaj flagi XmlReaderSettings.Async lub XmlWriterSettings.Async na
true, jeśli nie zamierzasz używać metody asynchronicznej.Jeśli zapomnisz określić
awaitsł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 zwrócić 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 uzyskać wartość tekstową w trybie asynchronicznym, lub użyj XmlReader.ReadValueChunkAsync metody , aby odczytać duży blok tekstu we fragmentach.
W przypadku używania obiektu wywołaj metodę XmlWriterXmlWriter.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 podstawiania, implementacja nie spełnia wymagań "Ograniczenie składnika schematu: Deklaracje elementów spójne", System.Xml które opisano 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 podstawiania. 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 podstawienie odwołanie do elementu e1 z sekwencji może spowodować element typu t1 lub w elemencie e1e2 typu t2. Ten ostatni przypadek spowodowałoby sekwencję 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 o takiej samej nazwie jak jeden z elementów w grupie.
- Kardynalność elementu odwołującego się do elementu głównego grupy podstawień i elementu o takiej samej nazwie jak element grupy podstawienia nie jest stały (minOccurs maxOccurs < ).
- Definicja elementu odwołującego się do grupy podstawiania poprzedza definicję elementu o takiej samej nazwie jak element grupy podstawień.
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 zabezpieczeń
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 obawy dotyczące zabezpieczeń. Na przykład należy upewnić się, że aplikacja pobiera pliki tylko z zaufanych witryn, a pobrany 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. Zawija XmlSecureResolver element XmlResolver i umożliwia ograniczenie zasobów, do których podstawowy XmlResolver ma dostęp.
Odmowa usługi
Poniższe scenariusze są uważane za mniej podatne na ataki typu "odmowa usługi", ponieważ System.Xml klasy zapewniają ochronę przed takimi atakami.
Analizowanie danych XML tekstu.
Analizowanie danych binarnych XML, jeśli dane binarne XML zostały wygenerowane przez program 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 Modelu obiektów dokumentów (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 martwisz się o ataki typu "odmowa 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 problemy z 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 w XmlReader obiektach tworzonych przez metodę XmlReader.Create .
Uwaga / Notatka
Ustawienie XmlTextReader zezwala na domyślne przetwarzanie DTD. XmlTextReader.DtdProcessing Użyj właściwości , 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 można uzyskać dostęp. Możesz również zaprojektować aplikację tak, aby przetwarzanie XML było ograniczone pod względem pamięci i czasu. Możesz na przykład 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 XmlReaderSettings.MaxCharactersFromEntities jednostek, ustawiając 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 można utworzyć schemat XML, który wymaga znacznego czasu na przetworzenie w przypadku oceny stosunkowo małego dokumentu. 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:
Skrypty XSLT są 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 rozszerzenia 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 bloków skryptów osadzonych. Złośliwy użytkownik może wykorzystać ten problem, dostarczając dane lub arkusze stylów, które po wykonaniu mogą spowodować przetworzenie systemu do momentu, gdy komputer nie będzie działać nisko na zasobach.
Aplikacje XSLT uruchamiane w środowisku mieszanego zaufania 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 innemu użytkownikowi, który następnie wywołuje XslCompiledTransform.Transform metodę i wykonuje przekształcenie.
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żkach, które nie mają być widoczne dla aplikacji. Aplikacje muszą przechwytywać wyjątki i odpowiednio je przetwarzać.