System.Xml Namnområde

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 abstract-klass som Windows Communication Foundation (WCF) härleder från XmlReader för serialisering och deserialisering.

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 interface som definierar kontraktet som en XML-ordlista måste implementera för att användas av XmlDictionaryReader och XmlDictionaryWriter implementeringar.

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 xml:space omfånget.

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

delegate för en motringningsmetod när läsaren stängs.

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:

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 await eller använder ett synkront API där en asynkron krävs.

  • Ange XmlReaderSettings.Async inte flaggan eller XmlWriterSettings.Async till true om du inte tänker använda en asynkron metod.

  • Om du glömmer att ange nyckelordet await nä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.

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 aktiverar document() 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.

Se även