System.Xml Obor názvů

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

Třídy

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 se definují v definici typu dokumentu (DTD) nebo ve schématu.

XmlAttributeCollection

Představuje kolekci atributů, ke kterým je možné přistupovat podle 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 objevují ve zprávách, a udržovat jejich stav.

XmlCDataSection

Představuje oddíl CDATA.

XmlCharacterData

Poskytuje metody pro manipulaci s textem, které využívá několik tříd.

XmlComment

Představuje obsah komentáře XML.

XmlConvert

Kóduje a dekóduje názvy XML a poskytuje metody pro převod mezi typy modulu CLR (Common Language Runtime) a typy jazyka XSD (XML schema definition). Při převodu datových typů jsou vrácené hodnoty nezávislé na národním prostředí.

XmlDataDocument

Umožňuje ukládat, načítat a zpracovávat strukturovaná data prostřednictvím relačního DataSet.

XmlDeclaration

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

XmlDictionary

Implementuje slovník sloužící k optimalizaci implementací čtecích a zapisovacích modulů XML technologie Windows Communication Foundation (WCF).

XmlDictionaryReader

Třída abstract , ze které windows communication foundation (WCF) odvozuje XmlReader serializace a deserializace.

XmlDictionaryReaderQuotas

Obsahuje konfigurovatelné hodnoty kvót pro objekt XmlDictionaryReaders.

XmlDictionaryString

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

XmlDictionaryWriter

Představuje abstraktní třídu, ze které 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í kódu XML v dokumentu.

XmlDocumentFragment

Představuje jednoduchý objekt, který je užitečný pro operace vložení stromu.

XmlDocumentType

Představuje deklaraci typu dokumentu.

XmlDocumentXPathExtensions

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

XmlElement

Představuje element.

XmlEntity

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

XmlEntityReference

Představuje referenční uzel entity.

XmlException

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

Vyřeší, přidá a odebere obory názvů do kolekce a poskytuje správu oborů 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 NodeChangedudálosti , NodeChanging, NodeInserted, NodeInsertingNodeRemoved a NodeRemoving .

XmlNodeList

Představuje uspořádanou kolekci uzlů.

XmlNodeReader

Představuje čtečku, která poskytuje rychlý přístup k datům XML v souboru , který není uložený v XmlNodemezipaměti.

XmlNotation

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

XmlParserContext

Poskytuje všechny kontextové informace vyžadované objektem XmlReader k analýze fragmentu XML.

XmlProcessingInstruction

Představuje příkaz pro zpracování, který jazyk XML definuje za účelem zachování informací týkajících se procesoru v textu dokumentu.

XmlQualifiedName

Představuje kvalifikovaný název XML.

XmlReader

Představuje čtecí modul, který poskytuje rychlý dopředný přístup bez mezipaměti k datům XML.

XmlReaderSettings

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

XmlResolver

Překládá externí prostředky XML pojmenované identifikátorem URI.

XmlSecureResolver

Pomáhá zabezpečit další implementaci XmlResolver tím, že zabalí XmlResolver objekt a omezí prostředky, ke kterým má podkladový XmlResolver objekt přístup.

XmlSignificantWhitespace

Představuje prázdné znaky v kódu v uzlu se smíšeným obsahem nebo prázdné znaky v oboru xml:space= 'preserve'. Označují se také jako významné prázdné znaky.

XmlText

Představuje textový obsah elementu nebo atributu.

XmlTextReader

Představuje čtecí modul, který poskytuje rychlý dopředný přístup bez mezipaměti k datům XML.

Počínaje rozhraním .NET Framework 2.0 doporučujeme místo toho použít XmlReader třídu .

XmlTextWriter

Představuje zapisovací modul, který nabízí rychlý dopředný způsob generování datových proudů nebo souborů obsahujících data XML bez mezipaměti, který je v souladu s doporučeními konsorcia W3C k jazyku XML (eXtensible Markup Language) 1.0 a oborům názvů v XML.

Počínaje rozhraním .NET Framework 2.0 doporučujeme místo toho použít XmlWriter třídu .

XmlUrlResolver

Překládá externí prostředky XML pojmenované identifikátorem URI.

XmlValidatingReader

Představuje čtenáře, který poskytuje definici typu dokumentu (DTD), schéma XDR (XML-Data Reduced) a ověřování jazyka XSD (XML Schema definition Language).

Tato třída je zastaralá. Počínaje rozhraním .NET Framework 2.0 doporučujeme použít XmlReaderSettings třídu a metodu Create k vytvoření ověřující čtečky XML.

XmlWhitespace

Představuje prázdné místo v obsahu elementu.

XmlWriter

Představuje zapisovací modul, který nabízí rychlý dopředný způsob generování datových proudů nebo souborů obsahujících data XML bez mezipaměti.

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í

IApplicationResourceStreamResolver

Představuje překladač datových proudů prostředků 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 objekt 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ětovnou inicializaci binární čtečky pro čtení nového dokumentu.

IXmlBinaryWriterInitializer

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

IXmlDictionary

A interface , který definuje kontrakt, který xml slovník musí implementovat, aby byl používán XmlDictionaryReader a XmlDictionaryWriter implementace.

IXmlLineInfo

Poskytuje rozhraní umožňující třídě vracet informace o řádku a pozici.

IXmlMtomReaderInitializer

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

IXmlMtomWriterInitializer

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

IXmlNamespaceResolver

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

IXmlTextReaderInitializer

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

IXmlTextWriterInitializer

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

Výčty

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 pro zpracování DTD. Výčet DtdProcessing je používán XmlReaderSettings třídou.

EntityHandling

Určuje způsob zpracování XmlTextReader entit nebo XmlValidatingReader .

Formatting

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

NamespaceHandling

Určuje, zda se mají odebrat duplicitní deklarace oboru názvů v objektu 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í xml:space obor.

XmlTokenizedType

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

Delegáti

OnXmlDictionaryReaderClose

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

XmlNodeChangedEventHandler

Představuje metodu, která zpracovává NodeChangedudálosti , NodeInsertedNodeChanging, NodeInserting, NodeRemoved a NodeRemoving .

Poznámky

Podporované standardy

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

V části Rozdíly od specifikací W3C najdete dva případy, kdy se třídy XML liší od doporučení W3C.

.NET také poskytuje další obory názvů pro operace související s XML. Seznam, popisy a odkazy najdete v tématu System.Xml Obory názvů.

Asynchronní zpracování XML

Třídy System.Xml.XmlReader a System.Xml.XmlWriter 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 psát asynchronní kód, který se podobá synchronnímu kódu, a můžete snadno migrovat stávající synchronní kód na asynchronní kód.

  • Asynchronní metody používejte v aplikacích, kde je vysoká latence síťového streamu. Nepoužívejte asynchronní rozhraní API pro operace čtení/zápisu datového proudu paměti nebo místního datového proudu souborů. Vstupní stream , XmlTextReadera XmlTextWriter by měl podporovat také asynchronní operace. Jinak budou vlákna stále blokována 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 synchronní rozhraní API, kde je asynchronní rozhraní API nezbytné.

  • Pokud nemáte v úmyslu používat asynchronní metodu XmlReaderSettings.Async , nenastavujte příznak nebo XmlWriterSettings.Async na true hodnotu .

  • Pokud zapomenete zadat await klíčové slovo při volání asynchronní metody, výsledky nejsou deterministické: Může se zobrazit očekávaný výsledek nebo výjimka.

  • XmlReader Když objekt čte velký textový uzel, může uložit 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í. Použijte metodu XmlReader.GetValueAsync k získání textové hodnoty v asynchronním režimu nebo použijte metodu XmlReader.ReadValueChunkAsync ke čtení velkého bloku textu v blocích.

  • Při použití objektu před voláním XmlWriterXmlWriter.Close volejte metodu XmlWriter.FlushAsync , aby nedošlo k blokování vstupně-výstupní operace.

Rozdíly od specifikací W3C

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

Konzistence v deklaracích prvků:

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

Například následující schéma zahrnuje prvky, které mají stejný název, ale různé typy ve stejném modelu obsahu, a skupiny pro 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 sekvenci prvků. Z důvodu nahrazení může odkaz na prvek e1 ze sekvence vést buď k prvku e1 typu t1 , nebo k prvku e2 typu t2. Druhý případ by vedlo k posloupnosti dvou e2 prvků, kde jeden je typu t2 a druhý je typu xs:int.

Unikátní přisuzování částic:

Za následujících podmínek System.Xml implementace nesplňuje omezení komponenty schématu: Atribuce jedinečných částic, která je popsána v části Omezení komponent schématu skupin modelů specifikace W3C.

  • Jeden z prvků ve skupině odkazuje na jiný prvek.

  • Odkazovaný prvek je hlavní prvek substituční skupiny.

  • Skupina nahrazení obsahuje prvek, který má stejný název jako jeden z prvků ve skupině.

  • Kardinalita elementu, který odkazuje na hlavní prvek skupiny náhrady a element se stejným názvem jako element substituční skupiny, není pevná (minOccurs < maxOccurs).

  • Definice elementu, který odkazuje na substituční skupinu, předchází definici elementu se stejným názvem jako element skupiny nahrazení.

Například v následujícím schématu je model obsahu 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 proti výše uvedenému schématu, ověření se nezdaří s následující zprávou: "Prvek e3 má neplatný podřízený element "e2". A XmlSchemaValidationException vyvolá se výjimka.

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

Chcete-li tento problém vyřešit, můžete prohodit deklarace prvků v dokumentu XSD. Příklad:

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

se stane 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 s výše uvedeným schématem, ověření se nezdaří s následující výjimkou: Neošetřená výjimka: System.Xml. Schema.XmlSchemaValidationException: Element 'e2' el 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>

Důležité informace o zabezpečení

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

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

Externí přístup

Několik technologií XML dokáže během zpracování načíst další dokumenty. Například definice typu dokumentu (DTD) se může nacházet v analyzovaném dokumentu. DTD může být také 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 aby 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 import nebo include.

Tuto třídu můžete přepsat a určit objekt, který XmlResolver se má použít. Třídu použijte, XmlSecureResolver pokud potřebujete otevřít prostředek, který nemáte pod kontrolou nebo který je nedůvěryhodný. Zabalí XmlSecureResolverXmlResolver a umožňuje omezit prostředky, ke kterým má podkladový objekt 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ředky ochrany před těmito útoky.

  • Analýza textových dat XML

  • Parsování binárních dat XML, pokud binární data XML vygeneroval Microsoft SQL Server.

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

  • Načítání 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 MODELU DOM

Následující scénáře se nedoporučují, pokud máte obavy z útoků na dostupnost služby (DoS) 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émat, kompilaci nedůvěryhodného schématu a ověřování pomocí nedůvěryhodného schématu.

  • Zpracování XSLT.

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

  • Operace modelu DOM, jako jsou dotazování, úpravy, přesouvání pod stromy mezi dokumenty a ukládání objektů MODELU DOM.

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

Poznámka

Ve XmlTextReader výchozím nastavení povoluje zpracování DTD. XmlTextReader.DtdProcessing Pomocí vlastnosti tuto funkci zakažte.

Pokud máte povolené zpracování DTD, můžete pomocí XmlSecureResolver třídy omezit prostředky, ke XmlReader kterým 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 časové limity.

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

Vzhledem k tomu, že dokumenty XML mohou obsahovat odkazy na jiné soubory, je obtížné určit, kolik výpočetního výkonu je vyžadován k parsování dokumentu XML. Například dokumenty XML mohou obsahovat DTD. Pokud DTD obsahuje vnořené entity nebo komplexní modely obsahu, může analýza dokumentu trvat příliš dlouho.

Při použití příkazu XmlReadermůžete nastavením XmlReaderSettings.MaxCharactersInDocument vlastnosti omezit velikost dokumentu, který se dá analyzovat. Nastavením vlastnosti můžete omezit počet znaků, které jsou výsledkem rozbalení entit XmlReaderSettings.MaxCharactersFromEntities . 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í. Je například možné vytvořit schéma XML, které vyžaduje značné množství času zpracování při vyhodnocení v relativně malém dokumentu. Bloky skriptů 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 důsledcích:

  • 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 vyžadujete 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 XslCompiledTransform.Transform metodě .

  • Objekty rozšíření jsou ve výchozím nastavení povolené. XsltArgumentList Pokud je objekt, který obsahuje rozšiřující objekty, předán metodě XslCompiledTransform.Transform , použijí se rozšiřující objekty.

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

  • Aplikace XSLT, které běží v prostředí se smíšeným vztahem 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ý následně zavolá metodu XslCompiledTransform.Transform a provede transformaci.

Tyto problémy se zabezpečením lze zmírnit tím, že nepovolíte 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.

Zpracování výjimek

Výjimky vyvolané komponentami nižší úrovně můžou odhalit informace o cestě, které nechcete zpřístupnit aplikaci. Aplikace musí zachytávat výjimky a odpovídajícím způsobem je zpracovávat.

Viz také