System.Xml Naamruimte
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt op standaarden gebaseerde ondersteuning voor het verwerken van XML.
Klassen
| Name | Description |
|---|---|
| NameTable |
Implementeert een enkele thread.XmlNameTable |
| UniqueId |
Een unieke id die is geoptimaliseerd voor Guids. |
| XmlAttribute |
Vertegenwoordigt een kenmerk. Geldige en standaardwaarden voor het kenmerk worden gedefinieerd in een documenttypedefinitie (DTD) of schema. |
| XmlAttributeCollection |
Vertegenwoordigt een verzameling kenmerken die kunnen worden geopend op naam of index. |
| XmlBinaryReaderSession |
Hiermee kunnen geoptimaliseerde tekenreeksen dynamisch worden beheerd. |
| XmlBinaryWriterSession |
Hiermee kunt u een dynamische woordenlijst gebruiken om algemene tekenreeksen te comprimeren die in een bericht worden weergegeven en de status behouden. |
| XmlCDataSection |
Vertegenwoordigt een CDATA-sectie. |
| XmlCharacterData |
Biedt methoden voor tekstbewerking die door verschillende klassen worden gebruikt. |
| XmlComment |
Vertegenwoordigt de inhoud van een XML-opmerking. |
| XmlConvert |
Xml-namen coderen en decoderen en biedt methoden voor het converteren tussen algemene runtimetypen voor talen en XSD-typen (XML Schema Definition Language). Bij het converteren van gegevenstypen zijn de geretourneerde waarden onafhankelijk van landinstellingen. |
| XmlDataDocument |
Hiermee kunnen gestructureerde gegevens worden opgeslagen, opgehaald en gemanipuleerd via een relationele DataSet. |
| XmlDeclaration |
Vertegenwoordigt het XML-declaratieknooppunt <?xml version='1.0'...?>. |
| XmlDictionary |
Hiermee wordt een woordenlijst geïmplementeerd die wordt gebruikt om de XML-lezer/schrijver-implementaties van Windows Communication Foundation (WCF) te optimaliseren. |
| XmlDictionaryReader |
Een |
| XmlDictionaryReaderQuotas |
Bevat configureerbare quotumwaarden voor XmlDictionaryReaders. |
| XmlDictionaryString |
Vertegenwoordigt een vermelding die is opgeslagen in een XmlDictionary. |
| XmlDictionaryWriter |
Vertegenwoordigt een abstracte klasse die Windows Communication Foundation (WCF) afgeleid is van XmlWriter om serialisatie en deserialisatie uit te voeren. |
| XmlDocument |
Vertegenwoordigt een XML-document. U kunt deze klasse gebruiken om XML in een document te laden, valideren, bewerken, toevoegen en positioneren. |
| XmlDocumentFragment |
Vertegenwoordigt een lichtgewicht object dat handig is voor bewerkingen voor het invoegen van structuur. |
| XmlDocumentType |
Vertegenwoordigt de declaratie van het documenttype. |
| XmlElement |
Vertegenwoordigt een element. |
| XmlEntity |
Vertegenwoordigt een entiteitsdeclaratie, zoals <! ENTITEIT... >. |
| XmlEntityReference |
Vertegenwoordigt een entiteitsreferentieknooppunt. |
| XmlException |
Retourneert gedetailleerde informatie over de laatste uitzondering. |
| XmlImplementation |
Hiermee definieert u de context voor een set XmlDocument objecten. |
| XmlLinkedNode |
Hiermee wordt het knooppunt direct vóór of na dit knooppunt opgehaald. |
| XmlNamedNodeMap |
Vertegenwoordigt een verzameling knooppunten die kunnen worden geopend op naam of index. |
| XmlNamespaceManager |
Hiermee worden naamruimten omgezet, toegevoegd en verwijderd uit een verzameling en wordt het bereikbeheer voor deze naamruimten geboden. |
| XmlNameTable |
Tabel met atomiseerde tekenreeksobjecten. |
| XmlNode |
Vertegenwoordigt één knooppunt in het XML-document. |
| XmlNodeChangedEventArgs |
Biedt gegevens voor de NodeChanged, NodeChanging, en NodeInsertingNodeInsertedNodeRemovedNodeRemoving gebeurtenissen. |
| XmlNodeList |
Vertegenwoordigt een geordende verzameling knooppunten. |
| XmlNodeReader |
Vertegenwoordigt een lezer die snelle, niet-in de cache geplaatste doorsturen alleen toegang biedt tot XML-gegevens in een XmlNode. |
| XmlNotation |
Vertegenwoordigt een notatiedeclaratie, zoals <! NOTATIE... > |
| XmlParserContext |
Biedt alle contextinformatie die nodig is voor het XmlReader parseren van een XML-fragment. |
| XmlProcessingInstruction |
Vertegenwoordigt een verwerkingsinstructie, die xml definieert om processorspecifieke informatie in de tekst van het document te bewaren. |
| XmlQualifiedName |
Vertegenwoordigt een gekwalificeerde XML-naam. |
| XmlReader |
Vertegenwoordigt een lezer die snelle, niet-in de cache opgeslagen, alleen-doorstuurtoegang biedt tot XML-gegevens. |
| XmlReaderSettings |
Hiermee geeft u een set functies op die moeten worden ondersteund voor het XmlReader object dat door de Create methode is gemaakt. |
| XmlResolver |
Hiermee worden externe XML-resources met de naam omgezet door een URI (Uniform Resource Identifier). |
| XmlSecureResolver |
Helpt bij het beveiligen van een andere implementatie door XmlResolver het XmlResolver object te verpakken en de resources te beperken waartoe de onderliggende XmlResolver gegevens toegang hebben. |
| XmlSignificantWhitespace |
Vertegenwoordigt witruimte tussen markeringen in een knooppunt met gemengde inhoud of witruimte binnen een bereik xml:space= 'behouden'. Dit wordt ook wel significante witruimte genoemd. |
| XmlText |
Vertegenwoordigt de tekstinhoud van een element of kenmerk. |
| XmlTextReader |
Vertegenwoordigt een lezer die snelle, niet-in de cache opgeslagen, alleen-doorstuurtoegang biedt tot XML-gegevens. U wordt aangeraden in plaats daarvan de XmlReader klas te gebruiken. |
| XmlTextWriter |
Vertegenwoordigt een schrijver die een snelle, niet-in cache geplaatste, forward-only manier biedt voor het genereren van streams of bestanden die XML-gegevens bevatten die voldoen aan de W3C Extensible Markup Language (XML) 1.0 en de naamruimten in XML-aanbevelingen. U wordt aangeraden in plaats daarvan de XmlWriter klas te gebruiken. |
| XmlUrlResolver |
Hiermee worden externe XML-resources met de naam omgezet door een URI (Uniform Resource Identifier). |
| XmlValidatingReader |
Vertegenwoordigt een lezer die DTD (Document Type Definition) biedt, XML-Data Gereduceerd (XDR)-schema en XSD-validatie (XML Schema Definition Language). Deze klasse is verouderd. U wordt aangeraden de XmlReaderSettings klasse en de Create methode te gebruiken om een geldige XML-lezer te maken. |
| XmlWhitespace |
Vertegenwoordigt witruimte in elementinhoud. |
| XmlWriter |
Vertegenwoordigt een schrijver die een snelle, niet-in de cache opgeslagen, alleen-doorsturende manier biedt voor het genereren van streams of bestanden die XML-gegevens bevatten. |
| XmlWriterSettings |
Hiermee geeft u een set functies op die moeten worden ondersteund voor het XmlWriter object dat door de Create methode is gemaakt. |
| XmlXapResolver |
Het type XmlXapResolver wordt gebruikt om resources op te lossen in het XAP-pakket van de Silverlight-toepassing. |
Interfaces
| Name | Description |
|---|---|
| IApplicationResourceStreamResolver |
Vertegenwoordigt een resourcestroom-resolver van een toepassing. |
| IFragmentCapableXmlDictionaryWriter |
Bevat eigenschappen en methoden waarmee xml-fragmenten kunnen worden verwerkt wanneer ze worden geïmplementeerd door een XmlDictionaryWriter. |
| IHasXmlNode |
Hiermee kan een klasse een XmlNode van de huidige context of positie retourneren. |
| IStreamProvider |
Vertegenwoordigt een interface die kan worden geïmplementeerd door klassen die streams bieden. |
| IXmlBinaryReaderInitializer |
Biedt methoden voor het opnieuw initialiseren van een binaire lezer om een nieuw document te lezen. |
| IXmlBinaryWriterInitializer |
Hiermee geeft u implementatievereisten voor XML binaire schrijvers die zijn afgeleid van deze interface. |
| IXmlDictionary |
Een |
| IXmlLineInfo |
Biedt een interface waarmee een klasse regel- en positiegegevens kan retourneren. |
| IXmlMtomReaderInitializer |
Hiermee geeft u implementatievereisten op voor XML MTOM-lezers die zijn afgeleid van deze interface. |
| IXmlMtomWriterInitializer |
Wanneer deze interface wordt geïmplementeerd door een MTOM-schrijver, zorgt deze interface voor initialisatie voor een MTOM-schrijver. |
| IXmlNamespaceResolver |
Biedt alleen-lezentoegang tot een set voorvoegsel- en naamruimtetoewijzingen. |
| IXmlTextReaderInitializer |
Hiermee geeft u implementatievereisten op voor XML-tekstlezers die zijn afgeleid van deze interface. |
| IXmlTextWriterInitializer |
Hiermee geeft u implementatievereisten op voor XML-tekstschrijvers die zijn afgeleid van deze interface. |
Enums
| Name | Description |
|---|---|
| ConformanceLevel |
Hiermee geeft u de hoeveelheid invoer- of uitvoercontrole op die XmlReader en XmlWriter objecten worden uitgevoerd. |
| DtdProcessing |
Hiermee geeft u de opties voor het verwerken van DTD's. De DtdProcessing opsomming wordt door de XmlReaderSettings klasse gebruikt. |
| EntityHandling |
Hiermee geeft u op hoe de XmlTextReader entiteiten worden verwerkt of XmlValidatingReader verwerkt. |
| Formatting |
Hiermee geeft u opmaakopties voor de XmlTextWriter. |
| NamespaceHandling |
Hiermee geeft u op of dubbele naamruimtedeclaraties in de XmlWriter. |
| NewLineHandling |
Hiermee geeft u op hoe regeleinden moeten worden verwerkt. |
| ReadState |
Hiermee geeft u de status van de lezer. |
| ValidationType |
Hiermee geeft u het type validatie dat moet worden uitgevoerd. |
| WhitespaceHandling |
Hiermee geeft u op hoe witruimte wordt verwerkt. |
| WriteState |
Hiermee geeft u de status van de XmlWriter. |
| XmlDateTimeSerializationMode |
Hiermee geeft u op hoe de tijdwaarde moet worden behandeld bij het converteren tussen tekenreeks en DateTime. |
| XmlDictionaryReaderQuotaTypes |
Opsomming van de configureerbare quotumwaarden voor XmlDictionaryReaders. |
| XmlNamespaceScope |
Definieert het bereik van de naamruimte. |
| XmlNodeChangedAction |
Hiermee geeft u het type knooppuntwijziging op. |
| XmlNodeOrder |
Beschrijft de documentvolgorde van een knooppunt in vergelijking met een tweede knooppunt. |
| XmlNodeType |
Hiermee geeft u het type knooppunt. |
| XmlOutputMethod |
Hiermee geeft u de methode op die wordt gebruikt om de XmlWriter uitvoer te serialiseren. |
| XmlSpace |
Hiermee geeft u het huidige |
| XmlTokenizedType |
Vertegenwoordigt het XML-type voor de tekenreeks. Hierdoor kan de tekenreeks worden gelezen als een bepaald XML-type, bijvoorbeeld een CDATA-sectietype. |
Gedelegeerden
| Name | Description |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Vertegenwoordigt de methode die gebeurtenissen verwerktNodeChanged, NodeChanging, NodeInserteden NodeRemovedNodeInsertingNodeRemoving gebeurtenissen. |
Opmerkingen
Ondersteunde standaarden
De System.Xml naamruimte ondersteunt deze standaarden:
- XML 1.0, inclusief DTD-ondersteuning
- XML-naamruimten, zowel stroomniveau als DOM
- XML-schema's
- XPath-expressies
- XSLT-transformaties
- DOM Level 1 Core
- DOM Level 2 Core
Zie de sectie Verschillen van de W3C-specificaties voor twee gevallen waarin de XML-klassen verschillen van de W3C-aanbevelingen.
XML asynchroon verwerken
De System.Xml.XmlReader en System.Xml.XmlWriter klassen bevatten een aantal asynchrone methoden die zijn gebaseerd op het asynchrone programmeermodel. Deze methoden kunnen worden geïdentificeerd door de tekenreeks 'Async' aan het einde van hun namen. Met deze methoden kunt u asynchrone code schrijven die vergelijkbaar is met uw synchrone code en kunt u uw bestaande synchrone code eenvoudig migreren naar asynchrone code.
Gebruik de asynchrone methoden in apps waarbij er aanzienlijke netwerkstroomlatentie is. Vermijd het gebruik van asynchrone API's voor geheugenstroom of lees-/schrijfbewerkingen voor een lokale bestandsstroom. De invoerstroom XmlTextReaderen XmlTextWriter moeten ook asynchrone bewerkingen ondersteunen. Anders worden threads nog steeds geblokkeerd door I/O-bewerkingen.
We raden u niet aan synchrone en asynchrone functieaanroepen te combineren, omdat u het trefwoord mogelijk vergeet te gebruiken
awaitof een synchrone API gebruikt waarbij een asynchrone API nodig is.Stel de XmlReaderSettings.Async vlag XmlWriterSettings.Async
trueniet in op als u geen asynchrone methode wilt gebruiken.Als u vergeet het
awaittrefwoord op te geven wanneer u een asynchrone methode aanroept, zijn de resultaten niet-deterministisch: U ontvangt mogelijk het verwachte resultaat of een uitzondering.Wanneer een XmlReader object een groot tekstknooppunt leest, kan het slechts een gedeeltelijke tekstwaarde in de cache opslaan en het tekstknooppunt retourneren. Het ophalen van de XmlReader.Value eigenschap kan dus worden geblokkeerd door een I/O-bewerking. Gebruik de XmlReader.GetValueAsync methode om de tekstwaarde op te halen in asynchrone modus of gebruik de XmlReader.ReadValueChunkAsync methode om een groot tekstblok in segmenten te lezen.
Wanneer u een XmlWriter object gebruikt, roept u de XmlWriter.FlushAsync methode aan voordat u aanroept XmlWriter.Close om te voorkomen dat een I/O-bewerking wordt geblokkeerd.
Verschillen met de W3C-specificaties
In twee gevallen waarbij beperkingen voor schemaonderdelen van modelgroepen zijn betrokken, verschilt de System.Xml naamruimte van de W3C-aanbevelingen.
Consistentie in elementdeclaraties:
Wanneer vervangingsgroepen worden gebruikt, voldoet de System.Xml implementatie in sommige gevallen niet aan de 'Beperking schemaonderdeel: elementdeclaraties consistent', die wordt beschreven in de sectie Beperkingen voor modelgroepschemaonderdelen van de W3C-specificatie.
Het volgende schema bevat bijvoorbeeld elementen met dezelfde naam, maar verschillende typen in hetzelfde inhoudsmodel en vervangingsgroepen worden gebruikt. Dit zou een fout moeten veroorzaken, maar System.Xml het schema zonder fouten compileert en valideert.
<?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>
In dit schema bevat het type t3 een reeks elementen. Vanwege de vervanging kan de verwijzing naar het element e1 uit de reeks resulteren in een element e1 van het type t1 of in het element e2 van het type t2. Het laatste geval zou resulteren in een reeks van twee e2 elementen, waarbij de ene van het type t2 is en de andere van het type xs:int.
Unieke deeltjestoeschrijving:
Onder de volgende voorwaarden voldoet de System.Xml implementatie niet aan de 'Schema Component Constraint: Unique Particle Attribution', die wordt beschreven in de sectie Beperkingen voor modelgroepschemaonderdelen van de W3C-specificatie.
- Een van de elementen in de groep verwijst naar een ander element.
- Het element waarnaar wordt verwezen, is een hoofdelement van een vervangingsgroep.
- De vervangingsgroep bevat een element met dezelfde naam als een van de elementen in de groep.
- De kardinaliteit van het element dat verwijst naar het hoofdelement van de vervangingsgroep en het element met dezelfde naam als een vervangingsgroepelement is niet vast (minOccurs < maxOccurs).
- De definitie van het element dat verwijst naar de vervangingsgroep gaat vooraf aan de definitie van het element met dezelfde naam als een vervangingsgroepelement.
In het onderstaande schema is het inhoudsmodel bijvoorbeeld dubbelzinnig en moet er een compilatiefout optreden, maar System.Xml wordt het schema zonder fouten gecompileerd.
<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>
Als u probeert de volgende XML te valideren op basis van het bovenstaande schema, mislukt de validatie met het volgende bericht: 'Het element 'e3' heeft een ongeldig onderliggend element 'e2'. Er wordt een XmlSchemaValidationException uitzondering gegenereerd.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
U kunt dit probleem omzeilen door elementdeclaraties in het XSD-document te wisselen. Voorbeeld:
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
wordt dit:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Hier volgt een ander voorbeeld van hetzelfde probleem:
<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>
Als u probeert de volgende XML te valideren op basis van het bovenstaande schema, mislukt de validatie met de volgende uitzondering: 'Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value.
<e3><e2>abc</e2></e3>
Beveiligingsoverwegingen
De typen en leden in de naamruimte System.Xml zijn afhankelijk van het .NET-beveiligingssysteem. In de volgende secties worden beveiligingsproblemen besproken die specifiek zijn voor XML-technologieën.
Houd er ook rekening mee dat wanneer u de System.Xml typen en leden gebruikt, als de XML gegevens bevat die mogelijk gevolgen hebben voor de privacy, uw app op een manier moet implementeren die de privacy van uw eindgebruikers respecteert.
Externe toegang
Verschillende XML-technologieën hebben de mogelijkheid om andere documenten op te halen tijdens de verwerking. Een documenttypedefinitie (DTD) kan zich bijvoorbeeld in het document bevinden dat wordt geparseerd. De DTD kan ook worden gebruikt in een extern document waarnaar wordt verwezen door het document dat wordt geparseerd. De XSD-technologieën (XML Schema Definition Language) en XSLT hebben ook de mogelijkheid om informatie uit andere bestanden op te nemen. Deze externe resources kunnen enkele beveiligingsproblemen opleveren. U wilt er bijvoorbeeld voor zorgen dat uw app alleen bestanden ophaalt van vertrouwde sites en dat het bestand dat wordt opgehaald geen schadelijke gegevens bevat.
De XmlUrlResolver klasse wordt gebruikt voor het laden van XML-documenten en het oplossen van externe resources, zoals entiteiten, DTD's of schema's, en het importeren of opnemen van instructies.
U kunt deze klasse overschrijven en het XmlResolver object opgeven dat u wilt gebruiken. Gebruik de XmlSecureResolver klasse als u een resource wilt openen waarvan u geen controle heeft of die niet betrouwbaar is. Hiermee XmlSecureResolver verpakt u een XmlResolver en kunt u de resources beperken waartoe de onderliggende XmlResolver gegevens toegang hebben.
Denial of Service
De volgende scenario's worden beschouwd als minder kwetsbaar voor Denial of Service-aanvallen, omdat de System.Xml klassen een middel bieden voor bescherming tegen dergelijke aanvallen.
XML-gegevens parseren.
Binaire XML-gegevens parseren als de binaire XML-gegevens zijn gegenereerd door Microsoft SQL Server.
XML-documenten en -fragmenten schrijven van gegevensbronnen naar het bestandssysteem, stromen, een TextWriterof een StringBuilder.
Documenten laden in het DOM-object (Document Object Model) als u een XmlReader object gebruikt en XmlReaderSettings.DtdProcessing instelt op DtdProcessing.Prohibit.
Navigeren door het DOM-object.
De volgende scenario's worden niet aanbevolen als u zich zorgen maakt over Denial of Service-aanvallen of als u in een niet-vertrouwde omgeving werkt.
DTD-verwerking.
Schemaverwerking. Dit omvat het toevoegen van een niet-vertrouwd schema aan de schemaverzameling, het compileren van een niet-vertrouwd schema en het valideren met behulp van een niet-vertrouwd schema.
XSLT-verwerking.
Parseer elke willekeurige stroom van door de gebruiker geleverde binaire XML-gegevens.
DOM-bewerkingen, zoals het uitvoeren van query's, bewerken, het verplaatsen van substructuren tussen documenten en het opslaan van DOM-objecten.
Als u zich zorgen maakt over denial of service-problemen of als u te maken hebt met niet-vertrouwde bronnen, schakelt u DTD-verwerking niet in. Dit is standaard uitgeschakeld voor XmlReader objecten die door de XmlReader.Create methode worden gemaakt.
Note
DTD-verwerking XmlTextReader is standaard toegestaan. Gebruik de XmlTextReader.DtdProcessing eigenschap om deze functie uit te schakelen.
Als DTD-verwerking is ingeschakeld, kunt u de XmlSecureResolver klasse gebruiken om de resources te beperken waartoe de XmlReader toegang toegang heeft. U kunt uw app ook ontwerpen zodat de XML-verwerking geheugen en tijd beperkt is. U kunt bijvoorbeeld time-outlimieten configureren in uw ASP.NET-app.
Overwegingen voor verwerking
Omdat XML-documenten verwijzingen naar andere bestanden kunnen bevatten, is het moeilijk te bepalen hoeveel verwerkingskracht nodig is om een XML-document te parseren. XML-documenten kunnen bijvoorbeeld een DTD bevatten. Als de DTD geneste entiteiten of complexe inhoudsmodellen bevat, kan het veel tijd duren om het document te parseren.
Wanneer u dit gebruikt XmlReader, kunt u de grootte van het document beperken dat kan worden geparseerd door de eigenschap in te XmlReaderSettings.MaxCharactersInDocument stellen. U kunt het aantal tekens beperken dat het resultaat is van het uitbreiden van entiteiten door de eigenschap in te XmlReaderSettings.MaxCharactersFromEntities stellen. Zie de juiste naslagonderwerpen voor voorbeelden van het instellen van deze eigenschappen.
De XSD- en XSLT-technologieën hebben extra mogelijkheden die van invloed kunnen zijn op de verwerkingsprestaties. Het is bijvoorbeeld mogelijk om een XML-schema te maken dat een aanzienlijke hoeveelheid tijd nodig heeft om te verwerken wanneer deze wordt geëvalueerd in een relatief klein document. Het is ook mogelijk om scriptblokken in te sluiten in een XSLT-opmaakmodel. Beide gevallen vormen een mogelijke beveiligingsrisico voor uw app.
Wanneer u een app maakt die gebruikmaakt van de XslCompiledTransform klasse, moet u rekening houden met de volgende items en de gevolgen ervan:
XSLT-scripts zijn standaard uitgeschakeld. XSLT-scripts moeten alleen worden ingeschakeld als u scriptondersteuning nodig hebt en u in een volledig vertrouwde omgeving werkt.
De XSLT-functie
document()is standaard uitgeschakeld. Als u dedocument()functie inschakelt, beperkt u de resources die toegankelijk zijn door een XmlSecureResolver object door te geven aan de XslCompiledTransform.Transform methode.Extensieobjecten zijn standaard ingeschakeld. Als een XsltArgumentList object met extensieobjecten wordt doorgegeven aan de XslCompiledTransform.Transform methode, worden de extensieobjecten gebruikt.
XSLT-opmaakmodellen kunnen verwijzingen naar andere bestanden en ingesloten scriptblokken bevatten. Een kwaadwillende gebruiker kan dit misbruiken door u te voorzien van gegevens of opmaakmodellen die, wanneer deze worden uitgevoerd, ertoe kunnen leiden dat uw systeem wordt verwerkt totdat de computer weinig resources heeft.
XSLT-apps die worden uitgevoerd in een omgeving met gemengde vertrouwensrelatie, kunnen leiden tot adresvervalsing van opmaakmodellen. Een kwaadwillende gebruiker kan bijvoorbeeld een object laden met een schadelijk opmaakmodel en dit doorgeven aan een andere gebruiker die de XslCompiledTransform.Transform methode vervolgens aanroept en de transformatie uitvoert.
Deze beveiligingsproblemen kunnen worden beperkt door scripting of de document() functie niet in te schakelen, tenzij het opmaakmodel afkomstig is van een vertrouwde bron en door geen objecten, XSLT-opmaakmodellen of XML-brongegevens van een niet-vertrouwde bron te accepteren XslCompiledTransform .
Afhandeling van uitzonderingen
Uitzonderingen die worden gegenereerd door onderdelen op een lager niveau, kunnen padinformatie vrijgeven die u niet beschikbaar wilt maken voor de app. Uw apps moeten uitzonderingen onderscheppen en ze op de juiste manier verwerken.