System.Xml Namnområde
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller standardbaserat stöd för bearbetning av XML.
Klasser
| Name | Description |
|---|---|
| NameTable |
Implementerar en enkeltrådad XmlNameTable. |
| UniqueId |
En unik identifierare som är optimerad för Guids. |
| XmlAttribute |
Representerar ett attribut. Giltiga värden och standardvärden för attributet definieras i en dokumenttypsdefinition (DTD) eller ett schema. |
| XmlAttributeCollection |
Representerar en samling attribut som kan nås med namn eller index. |
| XmlBinaryReaderSession |
Gör att optimerade strängar kan hanteras på ett dynamiskt sätt. |
| XmlBinaryWriterSession |
Aktiverar användning av en dynamisk ordlista för att komprimera vanliga strängar som visas i ett meddelande och underhålla tillstånd. |
| XmlCDataSection |
Representerar ett CDATA-avsnitt. |
| XmlCharacterData |
Innehåller metoder för textmanipulering som används av flera klasser. |
| XmlComment |
Representerar innehållet i en XML-kommentar. |
| XmlConvert |
Kodar och avkodar XML-namn och tillhandahåller metoder för att konvertera mellan vanliga språkkörningstyper och XSD-typer (XML Schema Definition Language). När du konverterar datatyper är de värden som returneras språkoberoende. |
| XmlDataDocument |
Tillåter att strukturerade data lagras, hämtas och manipuleras via en relationell DataSet. |
| XmlDeclaration |
Representerar XML-deklarationsnoden <?xml version='1.0'...?>. |
| XmlDictionary |
Implementerar en ordlista som används för att optimera xml-läsare/skrivimplementeringar för Windows Communication Foundation (WCF). |
| XmlDictionaryReader |
En |
| XmlDictionaryReaderQuotas |
Innehåller konfigurerbara kvotvärden för XmlDictionaryReaders. |
| XmlDictionaryString |
Representerar en post som lagras i en XmlDictionary. |
| XmlDictionaryWriter |
Representerar en abstrakt klass som Windows Communication Foundation (WCF) härleder från XmlWriter för serialisering och deserialisering. |
| XmlDocument |
Representerar ett XML-dokument. Du kan använda den här klassen för att läsa in, verifiera, redigera, lägga till och placera XML i ett dokument. |
| XmlDocumentFragment |
Representerar ett lättviktsobjekt som är användbart för trädinfogningsåtgärder. |
| XmlDocumentType |
Representerar dokumenttypdeklarationen. |
| XmlElement |
Representerar ett element. |
| XmlEntity |
Representerar en entitetsdeklaration, till exempel <! ENTITET... >. |
| XmlEntityReference |
Representerar en entitetsreferensnod. |
| XmlException |
Returnerar detaljerad information om det senaste undantaget. |
| XmlImplementation |
Definierar kontexten för en uppsättning XmlDocument objekt. |
| XmlLinkedNode |
Hämtar noden direkt före eller efter den här noden. |
| XmlNamedNodeMap |
Representerar en samling noder som kan nås med namn eller index. |
| XmlNamespaceManager |
Löser, lägger till och tar bort namnområden i en samling och tillhandahåller omfångshantering för dessa namnområden. |
| XmlNameTable |
Tabell med atomiserade strängobjekt. |
| XmlNode |
Representerar en enskild nod i XML-dokumentet. |
| XmlNodeChangedEventArgs |
Innehåller data för NodeChangedhändelserna , NodeChanging, NodeInserted, NodeInsertingNodeRemoved och NodeRemoving . |
| XmlNodeList |
Representerar en ordnad samling noder. |
| XmlNodeReader |
Representerar en läsare som ger snabb, icke-cachelagrad vidarebefordran endast åtkomst till XML-data i en XmlNode. |
| XmlNotation |
Representerar en notationsdeklaration, till exempel <! NOTATION... >. |
| XmlParserContext |
Innehåller all kontextinformation som krävs för XmlReader att parsa ett XML-fragment. |
| XmlProcessingInstruction |
Representerar en bearbetningsinstruktion som XML definierar för att behålla processorspecifik information i texten i dokumentet. |
| XmlQualifiedName |
Representerar ett XML-kvalificerat namn. |
| XmlReader |
Representerar en läsare som ger snabb, icke-cachekopplad, vidarebefordrad åtkomst till XML-data. |
| XmlReaderSettings |
Anger en uppsättning funktioner som ska stödjas på objektet XmlReader som skapats av Create metoden. |
| XmlResolver |
Löser externa XML-resurser med namnet av en URI (Uniform Resource Identifier). |
| XmlSecureResolver |
Hjälper till att skydda en annan implementering av XmlResolver genom att omsluta XmlResolver objektet och begränsa de resurser som den underliggande XmlResolver har åtkomst till. |
| XmlSignificantWhitespace |
Representerar tomt utrymme mellan markeringar i en nod med blandat innehåll eller tomt utrymme i ett xml:space= "preserve"-omfång. Detta kallas även för betydande blanksteg. |
| XmlText |
Representerar textinnehållet i ett element eller attribut. |
| XmlTextReader |
Representerar en läsare som ger snabb, icke-cachelagrad, vidarebefordrad åtkomst till XML-data. Vi rekommenderar att du använder XmlReader klassen i stället. |
| XmlTextWriter |
Representerar en skrivare som tillhandahåller ett snabbt, icke-cachelagrat, framåtriktat sätt att generera strömmar eller filer som innehåller XML-data som överensstämmer med W3C Extensible Markup Language (XML) 1.0 och namnrymderna i XML-rekommendationer. Vi rekommenderar att du använder XmlWriter klassen i stället. |
| XmlUrlResolver |
Löser externa XML-resurser med namnet av en URI (Uniform Resource Identifier). |
| XmlValidatingReader |
Representerar en läsare som tillhandahåller schema för dokumenttypsdefinition (DTD), XML-Data reducerat schema (XDR) och XSD-validering (XML Schema Definition Language). Den här klassen är föråldrad. Vi rekommenderar att du använder XmlReaderSettings klassen och Create metoden för att skapa en validerande XML-läsare. |
| XmlWhitespace |
Representerar tomt utrymme i elementinnehåll. |
| XmlWriter |
Representerar en skrivare som ger ett snabbt, icke-cachelagrat, framåtriktat sätt att generera strömmar eller filer som innehåller XML-data. |
| XmlWriterSettings |
Anger en uppsättning funktioner som ska stödjas på objektet XmlWriter som skapats av Create metoden. |
| XmlXapResolver |
Typen XmlXapResolver används för att matcha resurser i Silverlight-programmets XAP-paket. |
Gränssnitt
| Name | Description |
|---|---|
| IApplicationResourceStreamResolver |
Representerar en lösning för programresursström. |
| IFragmentCapableXmlDictionaryWriter |
Innehåller egenskaper och metoder som när de implementeras av en XmlDictionaryWritertillåter bearbetning av XML-fragment. |
| IHasXmlNode |
Gör att en klass kan returnera en XmlNode från den aktuella kontexten eller positionen. |
| IStreamProvider |
Representerar ett gränssnitt som kan implementeras av klasser som tillhandahåller strömmar. |
| IXmlBinaryReaderInitializer |
Innehåller metoder för att initiera om en binär läsare för att läsa ett nytt dokument. |
| IXmlBinaryWriterInitializer |
Anger implementeringskrav för XML-binära skrivare som härleds från det här gränssnittet. |
| IXmlDictionary |
En |
| IXmlLineInfo |
Tillhandahåller ett gränssnitt för att aktivera en klass för att returnera rad- och positionsinformation. |
| IXmlMtomReaderInitializer |
Anger implementeringskrav för XML MTOM-läsare som härleds från det här gränssnittet. |
| IXmlMtomWriterInitializer |
När det implementeras av en MTOM-skrivare säkerställer det här gränssnittet initiering för en MTOM-skrivare. |
| IXmlNamespaceResolver |
Ger skrivskyddad åtkomst till en uppsättning prefix- och namnområdesmappningar. |
| IXmlTextReaderInitializer |
Anger implementeringskrav för XML-textläsare som härleds från det här gränssnittet. |
| IXmlTextWriterInitializer |
Anger implementeringskrav för XML-textskrivare som härleds från det här gränssnittet. |
Uppräkningar
| Name | Description |
|---|---|
| ConformanceLevel |
Anger hur mycket indata eller utdata som ska kontrolleras och XmlWriter vilka objekt som XmlReader utförs. |
| DtdProcessing |
Anger alternativ för bearbetning av DTD:er. Uppräkningen DtdProcessing används av XmlReaderSettings klassen. |
| EntityHandling |
Anger hur XmlTextReader eller XmlValidatingReader hanterar entiteter. |
| Formatting |
Anger formateringsalternativ för XmlTextWriter. |
| NamespaceHandling |
Anger om du vill ta bort duplicerade namnområdesdeklarationer i XmlWriter. |
| NewLineHandling |
Anger hur radbrytningar ska hanteras. |
| ReadState |
Anger läsarens tillstånd. |
| ValidationType |
Anger vilken typ av validering som ska utföras. |
| WhitespaceHandling |
Anger hur tomt utrymme hanteras. |
| WriteState |
Anger tillståndet för XmlWriter. |
| XmlDateTimeSerializationMode |
Anger hur tidsvärdet ska behandlas när du konverterar mellan strängen och DateTime. |
| XmlDictionaryReaderQuotaTypes |
Räknar upp konfigurerbara kvotvärden för XmlDictionaryReaders. |
| XmlNamespaceScope |
Definierar namnområdesomfånget. |
| XmlNodeChangedAction |
Anger typ av nodändring. |
| XmlNodeOrder |
Beskriver dokumentordningen för en nod jämfört med en andra nod. |
| XmlNodeType |
Anger typ av nod. |
| XmlOutputMethod |
Anger den metod som används för att serialisera XmlWriter utdata. |
| XmlSpace |
Anger det aktuella |
| XmlTokenizedType |
Representerar XML-typen för strängen. Detta gör att strängen kan läsas som en viss XML-typ, till exempel en CDATA-avsnittstyp. |
Delegeringar
| Name | Description |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Representerar den metod som hanterar NodeChanged, NodeChanging, NodeInserted, NodeInsertingNodeRemoved och NodeRemoving händelser. |
Kommentarer
Standarder som stöds
Namnområdet System.Xml stöder följande standarder:
- XML 1.0, inklusive DTD-stöd
- XML-namnområden, både på strömnivå och DOM
- XML-scheman
- XPath-uttryck
- XSLT-transformeringar
- DOM Level 1 Core
- DOM Level 2 Core
Se avsnittet Skillnader från W3C-specifikationerna för två fall där XML-klasserna skiljer sig från W3C-rekommendationerna.
Bearbeta XML asynkront
Klasserna System.Xml.XmlReader och System.Xml.XmlWriter innehåller ett antal asynkrona metoder som baseras på den asynkrona programmeringsmodellen. Dessa metoder kan identifieras av strängen "Async" i slutet av deras namn. Med dessa metoder kan du skriva asynkron kod som liknar din synkrona kod, och du kan enkelt migrera din befintliga synkrona kod till asynkron kod.
Använd asynkrona metoder i appar där det finns betydande svarstid för nätverksströmmar. Undvik att använda asynkrona API:er för minnesström eller lokala filströmmens läs-/skrivåtgärder. Indataströmmen , XmlTextReaderoch XmlTextWriter bör också ha stöd för asynkrona åtgärder. Annars blockeras trådar fortfarande av I/O-åtgärder.
Vi rekommenderar inte att du blandar synkrona och asynkrona funktionsanrop, eftersom du kanske glömmer att använda nyckelordet
awaiteller använder ett synkront API där en asynkron krävs.Ange XmlReaderSettings.Async inte flaggan eller XmlWriterSettings.Async till
trueom du inte tänker använda en asynkron metod.Om du glömmer att ange nyckelordet
awaitnär du anropar en asynkron metod är resultatet icke-deterministiskt: Du kan få det resultat du förväntade dig eller ett undantag.När ett XmlReader objekt läser en stor textnod kan det endast cachelagra ett partiellt textvärde och returnera textnoden, så hämtning av XmlReader.Value egenskapen kan blockeras av en I/O-åtgärd. XmlReader.GetValueAsync Använd metoden för att hämta textvärdet i asynkront läge, eller använd XmlReader.ReadValueChunkAsync metoden för att läsa ett stort textblock i segment.
När du använder ett XmlWriter objekt anropar XmlWriter.FlushAsync du metoden innan du anropar XmlWriter.Close för att undvika att blockera en I/O-åtgärd.
Skillnader från W3C-specifikationerna
I två fall som omfattar begränsningar för modellgruppschemakomponenter System.Xml skiljer sig namnområdet från W3C-rekommendationerna.
Konsekvens i elementdeklarationer:
I vissa fall, när ersättningsgrupper används, System.Xml uppfyller implementeringen inte "Schemakomponentbegränsning: Elementdeklarationer konsekventa", som beskrivs i avsnittet Begränsningar för modellgruppschemakomponenter i W3C-specifikationen.
Följande schema innehåller till exempel element som har samma namn men olika typer i samma innehållsmodell, och ersättningsgrupper används. Detta bör orsaka ett fel, men System.Xml kompilerar och validerar schemat utan fel.
<?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>
I det här schemat innehåller typen t3 en sekvens med element. På grund av ersättningen kan referensen till elementet e1 från sekvensen resultera i e1 element av typen t1 eller i element e2 av typen t2. Det senare fallet skulle resultera i en sekvens med två e2 element, där det ena är av typen t2 och det andra är av typen xs:int.
Unik partikel-attribution:
Under följande villkor System.Xml uppfyller implementeringen inte "Schemakomponentbegränsning: Unik partikeltilldelning", som beskrivs i avsnittet Begränsningar för modellgruppschemakomponenter i W3C-specifikationen.
- Ett av elementen i gruppen refererar till ett annat element.
- Det refererade elementet är ett huvudelement i en ersättningsgrupp.
- Ersättningsgruppen innehåller ett element som har samma namn som ett av elementen i gruppen.
- Kardinaliteten för elementet som refererar till ersättningsgruppens huvudelement och elementet med samma namn som ett ersättningsgruppelement är inte fast (minOccurs < maxOccurs).
- Definitionen av elementet som refererar till ersättningsgruppen föregår definitionen av elementet med samma namn som ett ersättningsgruppelement.
I schemat nedan är innehållsmodellen till exempel tvetydig och bör orsaka ett kompileringsfel, men System.Xml kompilerar schemat utan fel.
<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>
Om du försöker verifiera följande XML mot schemat ovan misslyckas verifieringen med följande meddelande: "Elementet 'e3' har ogiltigt underordnat element 'e2'." och ett XmlSchemaValidationException undantag utlöses.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
För att undvika det här problemet kan du växla elementdeklarationer i XSD-dokumentet. Ett exempel:
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
blir detta:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Här är ett annat exempel på samma problem:
<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>
Om du försöker verifiera följande XML mot schemat ovan misslyckas verifieringen med följande undantag: "Ohanterat undantag: System.Xml.Schema.XmlSchemaValidationException: "e2" el-elementet är ogiltigt – värdet "abc" är ogiltigt enligt dess datatyp 'http://www.w3.org/2001/XMLSchema:int' – strängen 'abc' är inte ett giltigt Int32-värde.
<e3><e2>abc</e2></e3>
Säkerhetsfrågor
Typerna och medlemmarna i namnområdet System.Xml förlitar sig på säkerhetssystemet .NET. I följande avsnitt beskrivs säkerhetsproblem som är specifika för XML-tekniker.
Observera också att när du använder typerna System.Xml och medlemmarna måste du implementera appen på ett sätt som respekterar slutanvändarsekretessen om XML:en innehåller data som kan påverka sekretessen.
Extern åtkomst
Flera XML-tekniker har möjlighet att hämta andra dokument under bearbetningen. Till exempel kan en definition av dokumenttyp (DTD) finnas i dokumentet som parsas. DTD kan också finnas i ett externt dokument som refereras av dokumentet som parsas. Xml-schemadefinitionsspråket (XSD) och XSLT-teknikerna har också möjlighet att inkludera information från andra filer. Dessa externa resurser kan utgöra vissa säkerhetsproblem. Du vill till exempel se till att appen endast hämtar filer från betrodda platser och att filen den hämtar inte innehåller skadliga data.
Klassen XmlUrlResolver används för att läsa in XML-dokument och för att lösa externa resurser, till exempel entiteter, DTD:er eller scheman, samt importera eller inkludera direktiv.
Du kan åsidosätta den här klassen och ange det objekt som XmlResolver ska användas. XmlSecureResolver Använd klassen om du behöver öppna en resurs som du inte kontrollerar eller som inte är betrodd. Den XmlSecureResolver omsluter en XmlResolver och gör att du kan begränsa de resurser som den underliggande XmlResolver har åtkomst till.
Denial of Service
Följande scenarier anses vara mindre sårbara för överbelastningsattacker eftersom klasserna System.Xml ger skydd mot sådana attacker.
Parsa XML-textdata.
Parsa binära XML-data om binära XML-data genererades av Microsoft SQL Server.
Skriva XML-dokument och fragment från datakällor till filsystemet, strömmar, en TextWritereller en StringBuilder.
Läser in dokument i DOM-objektet (Document Object Model) om du använder ett XmlReader objekt och XmlReaderSettings.DtdProcessing anger till DtdProcessing.Prohibit.
Navigera i DOM-objektet.
Följande scenarier rekommenderas inte om du är orolig för överbelastningsattacker eller om du arbetar i en obetrodd miljö.
DTD-bearbetning.
Schemabearbetning. Detta omfattar att lägga till ett obetrott schema i schemasamlingen, kompilera ett ej betrott schema och verifiera med hjälp av ett ej betrott schema.
XSLT-bearbetning.
Parsa valfri godtycklig ström av användarangivna binära XML-data.
DOM-åtgärder som att fråga, redigera, flytta underträd mellan dokument och spara DOM-objekt.
Om du är orolig för problem med Denial of Service eller om du har att göra med ej betrodda källor ska du inte aktivera DTD-bearbetning. Detta är inaktiverat som standard för XmlReader objekt som XmlReader.Create metoden skapar.
Note
Tillåter XmlTextReader DTD-bearbetning som standard. Använd egenskapen XmlTextReader.DtdProcessing för att inaktivera den här funktionen.
Om du har aktiverat DTD-bearbetning kan du använda XmlSecureResolver klassen för att begränsa de resurser som XmlReader kan komma åt. Du kan också utforma din app så att XML-bearbetningen är minnes- och tidsbegränsad. Du kan till exempel konfigurera tidsgränser i din ASP.NET-app.
Bearbetningsöverväganden
Eftersom XML-dokument kan innehålla referenser till andra filer är det svårt att avgöra hur mycket bearbetningskraft som krävs för att parsa ett XML-dokument. XML-dokument kan till exempel innehålla en DTD. Om DTD:t innehåller kapslade entiteter eller komplexa innehållsmodeller kan det ta för lång tid att parsa dokumentet.
När du använder XmlReaderkan du begränsa storleken på dokumentet som kan parsas genom att ange XmlReaderSettings.MaxCharactersInDocument egenskapen. Du kan begränsa antalet tecken som uppstår när entiteter expanderas genom att ange egenskapen XmlReaderSettings.MaxCharactersFromEntities . Se lämpliga referensavsnitt för exempel på hur du anger dessa egenskaper.
XSD- och XSLT-teknikerna har ytterligare funktioner som kan påverka bearbetningsprestanda. Det går till exempel att konstruera ett XML-schema som kräver mycket tid att bearbeta när det utvärderas över ett relativt litet dokument. Det går också att bädda in skriptblock i en XSLT-formatmall. Båda fallen utgör ett potentiellt säkerhetshot mot din app.
När du skapar en app som använder XslCompiledTransform klassen bör du vara medveten om följande objekt och deras konsekvenser:
XSLT-skript är inaktiverat som standard. XSLT-skript ska endast aktiveras om du behöver skriptstöd och arbetar i en fullständigt betrodd miljö.
XSLT-funktionen
document()är inaktiverad som standard. Om du aktiverardocument()funktionen begränsar du de resurser som kan nås genom att skicka ett XmlSecureResolver objekt till XslCompiledTransform.Transform metoden.Tilläggsobjekt är aktiverade som standard. Om ett XsltArgumentList objekt som innehåller tilläggsobjekt skickas till XslCompiledTransform.Transform metoden används tilläggsobjekten.
XSLT-formatmallar kan innehålla referenser till andra filer och inbäddade skriptblock. En obehörig användare kan utnyttja detta genom att förse dig med data eller formatmallar som, när de körs, kan göra att systemet bearbetas tills datorn har ont om resurser.
XSLT-appar som körs i en miljö med blandat förtroende kan resultera i förfalskning av formatmallar. En obehörig användare kan till exempel läsa in ett objekt med ett skadligt formatmallar och lämna över det till en annan användare som därefter anropar XslCompiledTransform.Transform metoden och kör omvandlingen.
Dessa säkerhetsproblem kan åtgärdas genom att inte aktivera skript eller document() funktionen såvida inte formatmallen kommer från en betrodd källa och genom att inte acceptera XslCompiledTransform objekt, XSLT-formatmallar eller XML-källdata från en ej betrodd källa.
Hantering av undantag
Undantag som genereras av komponenter på lägre nivå kan avslöja sökvägsinformation som du inte vill ska exponeras för appen. Dina appar måste fånga upp undantag och bearbeta dem på rätt sätt.