Sdílet prostřednictvím


System.Xml Obor názvů

Poskytuje podporu na základě standardů pro zpracování XML.

Třídy

Name Description
NameTable

Implementuje jednovláknový XmlNameTable.

UniqueId

Jedinečný identifikátor optimalizovaný pro identifikátory GUID.

XmlAttribute

Představuje atribut. Platné a výchozí hodnoty atributu jsou definovány v definici typu dokumentu (DTD) nebo schématu.

XmlAttributeCollection

Představuje kolekci atributů, ke kterým lze získat přístup pomocí názvu nebo indexu.

XmlBinaryReaderSession

Umožňuje dynamickou správu optimalizovaných řetězců.

XmlBinaryWriterSession

Umožňuje pomocí dynamického slovníku komprimovat běžné řetězce, které se zobrazují ve zprávě a udržují stav.

XmlCDataSection

Představuje oddíl CDATA.

XmlCharacterData

Poskytuje metody manipulace s textem, které jsou používány několika třídami.

XmlComment

Představuje obsah komentáře XML.

XmlConvert

Kóduje a dekóduje názvy XML a poskytuje metody pro převod mezi běžnými typy modulu runtime jazyka a typy XSD (XML Schema Definition Language Language). Při převodu datových typů jsou vrácené hodnoty nezávislé na národním prostředí.

XmlDataDocument

Umožňuje, aby strukturovaná data byla uložena, načtena a manipulována prostřednictvím relačních DataSetdat .

XmlDeclaration

Představuje uzel <deklarace XML ?xml version='1.0'...?>.

XmlDictionary

Implementuje slovník používaný k optimalizaci implementací čtečky a zapisovače XML technologie Windows Communication Foundation (WCF).

XmlDictionaryReader

Třída abstract , ze které služba Windows Communication Foundation (WCF) pochází od XmlReader serializace a deserializace.

XmlDictionaryReaderQuotas

Obsahuje konfigurovatelné hodnoty kvót pro třídy XmlDictionaryReader.

XmlDictionaryString

Představuje položku uloženou v objektu XmlDictionary.

XmlDictionaryWriter

Představuje abstraktní třídu, ze které služba Windows Communication Foundation (WCF) odvozuje XmlWriter serializaci a deserializaci.

XmlDocument

Představuje dokument XML. Tuto třídu můžete použít k načtení, ověření, úpravě, přidání a umístění XML v dokumentu.

XmlDocumentFragment

Představuje jednoduchý objekt, který je užitečný pro operace vkládání stromu.

XmlDocumentType

Představuje deklaraci typu dokumentu.

XmlDocumentXPathExtensions

Poskytuje rozšiřující metody pro navigaci v XmlDocument dokumentu a XmlNode pro navigaci v dokumentu.

XmlElement

Představuje prvek.

XmlEntity

Představuje deklaraci entity, například <! ENTITA... >.

XmlEntityReference

Představuje referenční uzel entity.

XmlException

Vrátí podrobné informace o poslední výjimce.

XmlImplementation

Definuje kontext pro sadu XmlDocument objektů.

XmlLinkedNode

Získá uzel bezprostředně před nebo za tímto uzlem.

XmlNamedNodeMap

Představuje kolekci uzlů, ke kterým lze přistupovat pomocí názvu nebo indexu.

XmlNamespaceManager

Řeší, přidává a odebírá obory názvů do kolekce a poskytuje správu oborů názvů pro tyto obory názvů.

XmlNameTable

Tabulka atomizovaných řetězcových objektů

XmlNode

Představuje jeden uzel v dokumentu XML.

XmlNodeChangedEventArgs

Poskytuje data pro události NodeChanged, , NodeInsertedNodeChangingNodeInserting, NodeRemoved a NodeRemoving události.

XmlNodeList

Představuje uspořádanou kolekci uzlů.

XmlNodeReader

Představuje čtečku, která poskytuje rychlý, nepřeposlaný přístup pouze k datům XML v objektu XmlNode.

XmlNotation

Představuje deklaraci notace, například <! NOTACE... >.

XmlParserContext

Poskytuje všechny kontextové informace vyžadované XmlReader parsováním fragmentu XML.

XmlProcessingInstruction

Představuje instrukce pro zpracování, která XML definuje, aby informace specifické pro procesor zůstaly v textu dokumentu.

XmlQualifiedName

Představuje kvalifikovaný název XML.

XmlReader

Představuje čtenáře, který poskytuje rychlý přístup k datům XML, bez mezipaměti.

XmlReaderSettings

Určuje sadu funkcí pro podporu objektu XmlReader vytvořeného metodou Create .

XmlResolver

Řeší externí prostředky XML pojmenované identifikátorem URI (Uniform Resource Identifier).

XmlSecureResolver

Pomáhá zabezpečit další implementaci XmlResolver zabalením objektu XmlResolver a omezením prostředků, ke kterým má podkladový XmlResolver objekt přístup.

XmlSignificantWhitespace

Představuje prázdné znaky mezi značkami v uzlu smíšeného obsahu nebo prázdným místem v rámci xml:space= 'preserve' scope. Označuje se také jako významné prázdné znaky.

XmlText

Představuje textový obsah prvku nebo atributu.

XmlTextReader

Představuje čtenáře, který poskytuje rychlý přístup k datům XML, který není uložený v mezipaměti.

Doporučujeme místo toho použít XmlReader třídu.

XmlTextWriter

Představuje zapisovač, který poskytuje rychlý, nepamětný, dopředný způsob generování datových proudů nebo souborů obsahujících data XML, která odpovídají jazyku W3C Extensible Markup Language (XML) 1.0 a oborů názvů v doporučení XML.

Doporučujeme místo toho použít XmlWriter třídu.

XmlUrlResolver

Řeší externí prostředky XML pojmenované identifikátorem URI (Uniform Resource Identifier).

XmlValidatingReader

Představuje čtečku, která poskytuje definici typu dokumentu (DTD), schéma XML-Data omezené (XDR) a ověřování jazyka XSD (XML Schema Definition Language).

Tato třída je zastaralá. Doporučujeme použít XmlReaderSettings třídu a metodu Create k vytvoření validační čtečky XML.

XmlWhitespace

Představuje prázdné znaky v obsahu prvku.

XmlWriter

Představuje zapisovač, který poskytuje rychlý, nepamětný, dopředný způsob generování datových proudů nebo souborů obsahujících data XML.

XmlWriterSettings

Určuje sadu funkcí pro podporu objektu XmlWriter vytvořeného metodou Create .

XmlXapResolver

Typ XmlXapResolver se používá k překladu prostředků v balíčku XAP aplikace Silverlight.

Rozhraní

Name Description
IApplicationResourceStreamResolver

Představuje překladač datových proudů aplikace.

IFragmentCapableXmlDictionaryWriter

Obsahuje vlastnosti a metody, které při implementaci pomocí XmlDictionaryWriter, umožňuje zpracování fragmentů XML.

IHasXmlNode

Umožňuje třídě vrátit XmlNode z aktuálního kontextu nebo pozice.

IStreamProvider

Představuje rozhraní, které lze implementovat pomocí tříd poskytujících datové proudy.

IXmlBinaryReaderInitializer

Poskytuje metody pro opětovné inicializaci binární čtečky pro čtení nového dokumentu.

IXmlBinaryWriterInitializer

Určuje požadavky na implementaci pro binární zapisovače XML, které jsou odvozeny z tohoto rozhraní.

IXmlDictionary

Kontrakt interface , který definuje, že slovník Xml musí implementovat, aby se používaly XmlDictionaryReader a XmlDictionaryWriter implementace.

IXmlLineInfo

Poskytuje rozhraní, které umožňuje třídě vrátit informace o řádku a pozici.

IXmlMtomReaderInitializer

Určuje požadavky na implementaci pro čtenáře XML MTOM, které jsou odvozeny z tohoto rozhraní.

IXmlMtomWriterInitializer

Při implementaci pomocí zapisovače MTOM toto rozhraní zajišťuje inicializaci pro zapisovač MTOM.

IXmlNamespaceResolver

Poskytuje přístup jen pro čtení k sadě mapování předpon a oborů názvů.

IXmlTextReaderInitializer

Určuje požadavky na implementaci pro čtečky textu XML, které jsou odvozeny z tohoto rozhraní.

IXmlTextWriterInitializer

Určuje požadavky na implementaci pro zapisovače textu XML, které jsou odvozeny z tohoto rozhraní.

Výčty

Name Description
ConformanceLevel

Určuje množství vstupních nebo výstupních kontrol, které XmlReader a XmlWriter objekty provádějí.

DtdProcessing

Určuje možnosti zpracování DTD. Výčet DtdProcessing používá třída XmlReaderSettings.

EntityHandling

Určuje, jak XmlTextReader nebo XmlValidatingReader zpracovávají entity.

Formatting

Určuje možnosti formátování pro XmlTextWriter.

NamespaceHandling

Určuje, zda chcete odebrat duplicitní deklarace oboru názvů v XmlWriter.

NewLineHandling

Určuje způsob zpracování konců řádků.

ReadState

Určuje stav čtenáře.

ValidationType

Určuje typ ověření, který se má provést.

WhitespaceHandling

Určuje způsob zpracování prázdných znaků.

WriteState

Určuje stav XmlWriter.

XmlDateTimeSerializationMode

Určuje, jak zacházet s časovou hodnotou při převodu mezi řetězcem a DateTime.

XmlDictionaryReaderQuotaTypes

Vytvoří výčet konfigurovatelných hodnot kvót pro XmlDictionaryReaders.

XmlNamespaceScope

Definuje obor názvů.

XmlNodeChangedAction

Určuje typ změny uzlu.

XmlNodeOrder

Popisuje pořadí dokumentů uzlu v porovnání s druhým uzlem.

XmlNodeType

Určuje typ uzlu.

XmlOutputMethod

Určuje metodu použitou k serializaci výstupu XmlWriter.

XmlSpace

Určuje aktuální rozsah xml:space.

XmlTokenizedType

Představuje typ XML pro řetězec. To umožňuje čtení řetězce jako konkrétního typu XML, například typu oddílu CDATA.

Delegáti

Name Description
OnXmlDictionaryReaderClose

delegate pro metodu zpětného volání při zavírání čtečky.

XmlNodeChangedEventHandler

Představuje metodu, která zpracovává NodeChanged, NodeChanging, NodeInserted, NodeInsertingNodeRemoved a NodeRemoving události.

Poznámky

Podporované standardy

Obor System.Xml názvů podporuje tyto standardy:

Viz část Rozdíly od specifikace W3C pro dva případy, ve kterých se třídy XML liší od doporučení W3C.

Asynchronní zpracování XML

System.Xml.XmlWriter Třídy System.Xml.XmlReader zahrnují řadu asynchronních metod, které jsou založeny na asynchronním programovacím modelu. Tyto metody lze identifikovat řetězcem "Async" na konci jejich názvů. Pomocí těchto metod můžete napsat asynchronní kód podobný synchronnímu kódu a stávající synchronní kód můžete snadno migrovat do asynchronního kódu.

  • Používejte asynchronní metody v aplikacích, u kterých je významná latence síťového datového proudu. Nepoužívejte asynchronní rozhraní API pro operace čtení a zápisu datového proudu paměti nebo místního datového proudu souborů. Vstupní datový proud XmlTextReadera XmlTextWriter měl by podporovat i asynchronní operace. V opačném případě budou vlákna stále blokovaná vstupně-výstupními operacemi.

  • Nedoporučujeme kombinovat synchronní a asynchronní volání funkcí, protože možná zapomenete použít await klíčové slovo nebo použít synchronní rozhraní API, kde je potřeba asynchronní.

  • Nenastavujte XmlReaderSettings.Async příznak, XmlWriterSettings.Asynctrue pokud nemáte v úmyslu použít asynchronní metodu.

  • Pokud při volání asynchronní metody zapomenete zadat await klíčové slovo, výsledky nejsou deterministické: Výsledek, který jste očekávali, nebo výjimku.

  • XmlReader Když objekt čte velký textový uzel, může ukládat do mezipaměti pouze částečnou textovou hodnotu a vrátit textový uzel, takže načtení XmlReader.Value vlastnosti může být blokováno vstupně-výstupní operací. XmlReader.GetValueAsync Pomocí metody získáte textovou hodnotu v asynchronním režimu nebo použijte metodu XmlReader.ReadValueChunkAsync ke čtení velkého bloku textu v blocích.

  • Při použití XmlWriter objektu zavolejte metodu XmlWriter.FlushAsync před voláním XmlWriter.Close , abyste zabránili blokování vstupně-výstupní operace.

Rozdíly od specifikací W3C

Ve dvou případech, které zahrnují omezení součástí schématu skupiny modelů, System.Xml se obor názvů liší od doporučení W3C.

Konzistence v deklaraci elementů:

V některých případech platí, že při použití System.Xml skupin nahrazení implementace nevyhovuje omezení součásti schématu: Deklarace elementů konzistentní, která je popsána v části Omezení součástí schématu skupiny modelů specifikace W3C.

Například následující schéma obsahuje prvky, které mají stejný název, ale různé typy ve stejném modelu obsahu a skupiny nahrazení se používají. To by mělo způsobit chybu, ale System.Xml zkompiluje a ověří schéma bez chyb.

<?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>

V tomto schématu typ t3 obsahuje posloupnost prvků. Z důvodu nahrazení může odkaz na prvek e1 ze sekvence vést buď k prvku e1 typu t1 , nebo prvku e2 typu t2. Druhé písmeno by vedlo k posloupnosti dvou e2 prvků, kde jeden je typu t2 a druhý je typu xs:int.

Přisuzování jedinečných částic:

Za následujících podmínek System.Xml implementace nesplňuje omezení součásti schématu: Jedinečné přisuzování částic, které je popsáno v části Omezení součástí schématu skupiny modelů specifikace W3C.

  • Jeden z prvků ve skupině odkazuje na jiný prvek.
  • Odkazovaný prvek je hlavním prvkem skupiny nahrazení.
  • Skupina nahrazení obsahuje prvek, který má stejný název jako jeden z prvků ve skupině.
  • Kardinalita elementu, který odkazuje na element head skupiny nahrazení a element se stejným názvem jako element skupiny nahrazení, není pevná (minOccurs < maxOccurs).
  • Definice elementu, který odkazuje na skupinu nahrazení předchází definici prvku se stejným názvem jako element skupiny nahrazení.

Například ve schématu pod modelem obsahu je nejednoznačný a měl by způsobit chybu kompilace, ale System.Xml zkompiluje schéma bez chyb.

<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>

Pokud se pokusíte ověřit následující kód XML ve schématu výše, ověření selže s následující zprávou: Element e3 má neplatný podřízený prvek e2 a XmlSchemaValidationException vyvolá se výjimka.

<e3>
  <e2>1</e2>
  <e2>2</e2>
</e3>

Tento problém můžete obejít tak, že v dokumentu XSD prohodíte deklarace prvků. Například:

<xs:sequence>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

stane se tímto:

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

Tady je další příklad stejného problému:

<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>

Pokud se pokusíte ověřit následující kód XML pro výše uvedené schéma, ověření selže s následující výjimkou: "Neošetřená výjimka: System.Xml.Schema.XmlSchemaValidationException: Element e2 je neplatný – hodnota abc je neplatná podle jeho datového typu 'http://www.w3.org/2001/XMLSchema:int' – Řetězec abc není platná hodnota Int32."

<e3><e2>abc</e2></e3>

Bezpečnostní aspekty

Typy a členy v System.Xml oboru názvů závisí na systému zabezpečení .NET. Následující části se týkají problémů se zabezpečením, které jsou specifické pro technologie XML.

Všimněte si také, že když používáte System.Xml typy a členy, pokud XML obsahuje data, která mají potenciální dopady na ochranu osobních údajů, musíte aplikaci implementovat způsobem, který respektuje ochranu osobních údajů koncových uživatelů.

Externí přístup

Během zpracování má několik technologií XML možnost načíst další dokumenty. Definice typu dokumentu (DTD) se může například nacházet v analyzovaném dokumentu. DTD může také žít v externím dokumentu, na který odkazuje analyzovaný dokument. Technologie XSD (XML Schema Definition Language) a XSLT mají také možnost zahrnout informace z jiných souborů. Tyto externí prostředky můžou představovat určité obavy týkající se zabezpečení. Budete například chtít zajistit, aby vaše aplikace načítala soubory jenom z důvěryhodných webů a že soubor, který načítá, neobsahuje škodlivá data.

Třída XmlUrlResolver se používá k načtení dokumentů XML a k překladu externích prostředků, jako jsou entity, DTD nebo schémata a direktivy importu nebo zahrnutí.

Tuto třídu můžete přepsat a určit objekt, XmlResolver který se má použít. Použijte třídu XmlSecureResolver, pokud potřebujete otevřít prostředek, který neřídíte, nebo který není důvěryhodný. Zabalí XmlSecureResolver a XmlResolver umožní omezit prostředky, ke kterým má podkladový zdroj XmlResolver přístup.

Odepření služby

Následující scénáře jsou považovány za méně zranitelné vůči útokům doS, protože System.Xml třídy poskytují prostředek ochrany před těmito útoky.

  • Analýza textových dat XML

  • Analýza binárních dat XML, pokud byla binární data XML generována Microsoft SQL Serverem.

  • Zápis dokumentů XML a fragmentů ze zdrojů dat do systému souborů, datových proudů, a TextWriternebo .StringBuilder

  • Načtení dokumentů do objektu MODELU DOM (Document Object Model), pokud používáte XmlReader objekt a XmlReaderSettings.DtdProcessing je nastaven na DtdProcessing.Prohibit.

  • Navigace v objektu DOM.

Následující scénáře se nedoporučují, pokud máte obavy o útoky na dostupnost služby nebo pokud pracujete v nedůvěryhodném prostředí.

  • Zpracování DTD

  • Zpracování schématu To zahrnuje přidání nedůvěryhodného schématu do kolekce schématu, kompilaci nedůvěryhodného schématu a ověření pomocí nedůvěryhodného schématu.

  • Zpracování XSLT

  • Parsování libovolného datového proudu zadaného uživatelem binárních dat XML

  • Operace MODELU DOM, jako jsou dotazování, úpravy, přesouvání dílčích stromů mezi dokumenty a ukládání objektů MODELU DOM.

Pokud máte obavy o problémy s odepřením služeb nebo pokud pracujete s nedůvěryhodnými zdroji, nepovolujte zpracování DTD. Tato možnost je ve výchozím nastavení zakázaná u XmlReader objektů, které XmlReader.Create metoda vytvoří.

Poznámka:

Ve XmlTextReader výchozím nastavení umožňuje zpracování DTD. XmlTextReader.DtdProcessing Tuto funkci můžete zakázat pomocí vlastnosti.

Pokud máte povolené zpracování DTD, můžete pomocí XmlSecureResolver třídy omezit prostředky, ke kterým XmlReader má přístup. Aplikaci můžete také navrhnout tak, aby zpracování XML bylo omezené na paměť a čas. V aplikaci ASP.NET můžete například nakonfigurovat limity časového limitu.

Důležité informace o zpracování

Vzhledem k tomu, že dokumenty XML můžou obsahovat odkazy na jiné soubory, je obtížné určit, kolik výpočetního výkonu je potřeba k analýze dokumentu XML. Například dokumenty XML můžou obsahovat DTD. Pokud DTD obsahuje vnořené entity nebo složité modely obsahu, může trvat příliš dlouho, než dokument parsuje.

Při použití XmlReadermůžete omezit velikost dokumentu, který lze analyzovat nastavením XmlReaderSettings.MaxCharactersInDocument vlastnosti. Počet znaků, které jsou výsledkem rozbalení entit, můžete omezit nastavením XmlReaderSettings.MaxCharactersFromEntities vlastnosti. Příklady nastavení těchto vlastností najdete v příslušných referenčních tématech.

Technologie XSD a XSLT mají další možnosti, které můžou ovlivnit výkon zpracování. Například je možné vytvořit schéma XML, které vyžaduje značné množství času ke zpracování při vyhodnocování v relativně malém dokumentu. Bloky skriptu je také možné vložit do šablony stylů XSLT. Oba případy představují potenciální bezpečnostní hrozbu pro vaši aplikaci.

Při vytváření aplikace, která používá XslCompiledTransform třídu, byste měli vědět o následujících položkách a jejich dopadech:

  • Skriptování XSLT je ve výchozím nastavení zakázané. Skriptování XSLT by mělo být povolené jenom v případě, že potřebujete podporu skriptů a pracujete v plně důvěryhodném prostředí.

  • Funkce XSLT document() je ve výchozím nastavení zakázaná. Pokud funkci povolíte document() , omezte prostředky, ke kterým je možné přistupovat předáním XmlSecureResolver objektu metodě XslCompiledTransform.Transform .

  • Objekty rozšíření jsou ve výchozím nastavení povolené. Pokud je XsltArgumentList do metody předán XslCompiledTransform.Transform objekt obsahující rozšiřující objekty, budou použity objekty rozšíření.

  • Šablony stylů XSLT mohou obsahovat odkazy na jiné soubory a vložené bloky skriptů. Uživatel se zlými úmysly to může zneužít tím, že vám poskytne data nebo šablony stylů, které můžou způsobit, že systém bude zpracovávat, dokud počítač nebude mít málo prostředků.

  • Aplikace XSLT, které běží v prostředí hybridní důvěryhodnosti, můžou vést k falšování identity šablon stylů. Uživatel se zlými úmysly může například načíst objekt se škodlivou šablonou stylů a předat ho jinému uživateli, který metodu XslCompiledTransform.Transform následně zavolá a provede transformaci.

Tyto problémy se zabezpečením je možné zmírnit tím, že nepovolí skriptování nebo document() funkci, pokud šablona stylů nepochází z důvěryhodného zdroje a nepřijme XslCompiledTransform objekty, šablony stylů XSLT nebo zdrojová data XML z nedůvěryhodného zdroje.

Ošetření výjimek

Výjimky vyvolané komponentami nižší úrovně můžou odhalit informace o cestě, které nechcete zpřístupnit aplikaci. Vaše aplikace musí zachytit výjimky a odpovídajícím způsobem je zpracovat.

Viz také