System.Xml Obor názvů
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 |
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 |
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í |
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 |
|
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:
Obory názvů XML, na úrovni streamu i na úrovni dom
V části Rozdíly od specifikací W3C najdete dva případy, kdy se třídy XML liší od doporučení W3C.
Související obory názvů
.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ítedocument()
, 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.