System.Xml Spazio dei nomi
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce supporto basato sugli standard per l'elaborazione di XML.
Classi
NameTable |
Implementa una classe XmlNameTable a thread singolo. |
UniqueId |
Identificatore univoco ottimizzato per GUID. |
XmlAttribute |
Rappresenta un attributo. I valori validi e predefiniti per l'attributo vengono definiti in un DTD (Document Type Definition) o schema. |
XmlAttributeCollection |
Rappresenta una raccolta di attributi a cui è possibile accedere in base al nome o all'indice. |
XmlBinaryReaderSession |
Consente di gestire in modo dinamico le stringhe ottimizzate. |
XmlBinaryWriterSession |
Consente di usare un dizionario dinamico per comprimere le stringhe comuni che vengono visualizzate in un messaggio e mantengono lo stato. |
XmlCDataSection |
Rappresenta una sezione CDATA. |
XmlCharacterData |
Fornisce i metodi di modifica del testo che vengono usati da diverse classi. |
XmlComment |
Rappresenta il contenuto di un commento XML. |
XmlConvert |
Codifica e decodifica i nomi XML e fornisce metodi per la conversione tra tipi Common Language Runtime e tipi XSD (XML Schema Definition Language). Quando si convertono i tipi di dati, i valori restituiti sono indipendenti dalle impostazioni locali. |
XmlDataDocument |
Consente di memorizzare, recuperare e modificare i dati strutturati mediante un DataSet relazionale. |
XmlDeclaration |
Rappresenta il nodo della dichiarazione XML <?xml version='1.0'...?>. |
XmlDictionary |
Implementa un dizionario usato per ottimizzare le implementazioni del reader/writer XML di Windows Communication Foundation (WCF). |
XmlDictionaryReader |
Classe |
XmlDictionaryReaderQuotas |
Contiene valori di quota configurabili per XmlDictionaryReaders. |
XmlDictionaryString |
Rappresenta una voce memorizzata in un XmlDictionary. |
XmlDictionaryWriter |
Rappresenta una classe astratta che Windows Communication Foundation (WCF) deriva da XmlWriter per eseguire la serializzazione e la deserializzazione. |
XmlDocument |
Rappresenta un documento XML. È possibile usare questa classe per caricare, convalidare, modificare, aggiungere e posizionare XML in un documento. |
XmlDocumentFragment |
Rappresenta un oggetto semplice che si rivela utile per operazioni di inserimento nella struttura ad albero. |
XmlDocumentType |
Rappresenta la dichiarazione del tipo di documento. |
XmlDocumentXPathExtensions |
Fornisce metodi di estensione per XmlDocument e XmlNode per gli spostamenti nei documenti. |
XmlElement |
Rappresenta un elemento. |
XmlEntity |
Rappresenta una dichiarazione di entità, ad esempio <!ENTITY... >. |
XmlEntityReference |
Rappresenta un nodo di riferimento dell'entità. |
XmlException |
Restituisce informazioni dettagliate sull'ultima eccezione. |
XmlImplementation |
Definisce il contesto per un insieme di oggetti XmlDocument. |
XmlLinkedNode |
Ottiene il nodo immediatamente precedente o successivo a quello corrente. |
XmlNamedNodeMap |
Rappresenta una raccolta di nodi a cui è possibile accedere in base al nome o all'indice. |
XmlNamespaceManager |
Risolve, aggiunge e rimuove spazi dei nomi in una raccolta e ne consente la gestione dell'ambito. |
XmlNameTable |
Tabella degli oggetti stringa atomizzati. |
XmlNode |
Rappresenta un singolo nodo nel documento XML. |
XmlNodeChangedEventArgs |
Fornisce dati per gli eventi NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving. |
XmlNodeList |
Rappresenta una raccolta ordinata di nodi. |
XmlNodeReader |
Rappresenta un visualizzatore che fornisce un accesso veloce, non in cache e di tipo forward-only ai dati XML di una classe XmlNode. |
XmlNotation |
Rappresenta una dichiarazione di notazione, ad esempio <!NOTATION... >. |
XmlParserContext |
Fornisce tutte le informazioni sul contesto richieste dalla classe XmlReader per analizzare un frammento XML. |
XmlProcessingInstruction |
Rappresenta un'istruzione di elaborazione, definita dal codice XML per mantenere le informazioni specifiche del processore nel testo del documento. |
XmlQualifiedName |
Rappresenta un nome completo XML. |
XmlReader |
Rappresenta un lettore che fornisce accesso veloce, non in cache e di tipo forward-only ai dati XML. |
XmlReaderSettings |
Specifica un set di funzionalità da supportare nell'oggetto XmlReader creato dal metodo Create. |
XmlResolver |
Risolve risorse XML esterne denominate da un URI (Uniform Resource Identifier). |
XmlSecureResolver |
Consente di proteggere un'altra implementazione di XmlResolver eseguendo il wrapping dell'oggetto XmlResolver e imponendo restrizioni sulle risorse accessibili all'oggetto XmlResolver sottostante. |
XmlSignificantWhitespace |
Rappresenta uno spazio vuoto tra markup in un nodo a contenuto misto oppure uno spazio vuoto all'interno di un ambito xml:space='preserve'. È indicato anche come spazio vuoto significativo. |
XmlText |
Rappresenta il contenuto di testo di un elemento o attributo. |
XmlTextReader |
Rappresenta un lettore che fornisce accesso veloce, non in cache e di tipo forward-only ai dati XML. A partire da .NET Framework 2.0, è consigliabile usare la classe XmlReader. |
XmlTextWriter |
Rappresenta un writer che fornisce un modo veloce, non in cache e di tipo forward-only di generare flussi o file che contengono dati XML conformi alle raccomandazioni W3C Extensible Markup Language (XML) 1.0 e Namespaces in XML. A partire da .NET Framework 2.0, è consigliabile usare la classe XmlWriter. |
XmlUrlResolver |
Risolve risorse XML esterne denominate da un URI (Uniform Resource Identifier). |
XmlValidatingReader |
Rappresenta un lettore che fornisce che fornisce la convalida di DTD (Document Type Definition), di schemi XDR (XML-Data Reduced) e di XSD (XML Schema Definition Language). Questa classe è obsoleta. A partire da .NET Framework 2.0, è consigliabile usare la classe XmlReaderSettings e il metodo Create per creare un lettore XML di convalida. |
XmlWhitespace |
Rappresenta uno spazio vuoto nel contenuto dell'elemento. |
XmlWriter |
Rappresenta un writer che fornisce un modo veloce, non in cache e di tipo forward-only per generare flussi o i file contenenti dati XML. |
XmlWriterSettings |
Specifica un set di funzionalità da supportare nell'oggetto XmlWriter creato dal metodo Create. |
XmlXapResolver |
Il tipo XmlXapResolver è usato per risolvere risorse nel pacchetto XAP dell'applicazione Silverlight. |
Interfacce
IApplicationResourceStreamResolver |
Rappresenta un resolver di flusso di risorse dell'applicazione. |
IFragmentCapableXmlDictionaryWriter |
Contiene proprietà e metodi che, in caso di implementazione tramite XmlDictionaryWriter, consentono di elaborare frammenti XML. |
IHasXmlNode |
Consente ad una classe di restituire un XmlNode dal contesto o dalla posizione corrente. |
IStreamProvider |
Rappresenta un'interfaccia che può essere implementata da classi che forniscono flussi. |
IXmlBinaryReaderInitializer |
Fornisce i metodi per reinizializzare un reader binario per leggere un nuovo documento. |
IXmlBinaryWriterInitializer |
Specifica i requisiti di implementazione per i writer binari XML che derivano da questa interfaccia. |
IXmlDictionary |
Una |
IXmlLineInfo |
Fornisce un'interfaccia per abilitare una classe per la restituzione di informazioni sulla riga e sulla posizione. |
IXmlMtomReaderInitializer |
Specifica i requisiti di implementazione per i reader MTOM XML che derivano da questa interfaccia. |
IXmlMtomWriterInitializer |
Se implementata da un writer MTOM, questa interfaccia assicura l'inizializzazione per un writer MTOM. |
IXmlNamespaceResolver |
Fornisce l'accesso in sola lettura a un set di mapping di prefissi e spazi dei nomi. |
IXmlTextReaderInitializer |
Specifica i requisiti di implementazione per i reader di testo XML che derivano da questa interfaccia. |
IXmlTextWriterInitializer |
Specifica i requisiti di implementazione per i writer di testo XML che derivano da questa interfaccia. |
Enumerazioni
ConformanceLevel |
Specifica il livello di controllo dell'input o dell'output eseguito dagli oggetti XmlReader e XmlWriter. |
DtdProcessing |
Specifica le opzioni per l'elaborazione di DTD. L'enumerazione DtdProcessing viene utilizzata dalla classe XmlReaderSettings. |
EntityHandling |
Specifica come la classe XmlTextReader o XmlValidatingReader gestisce le entità. |
Formatting |
Specifica le opzioni di formattazione per XmlTextWriter. |
NamespaceHandling |
Specifica se rimuovere le dichiarazioni di spazio dei nomi duplicate nell'oggetto XmlWriter. |
NewLineHandling |
Specifica come gestire le interruzioni di riga. |
ReadState |
Specifica lo stato del lettore. |
ValidationType |
Specifica il tipo di convalida da eseguire. |
WhitespaceHandling |
Specifica come viene gestito lo spazio vuoto. |
WriteState |
Specifica lo stato della classe XmlWriter. |
XmlDateTimeSerializationMode |
Specifica in che modo deve essere considerato il valore dell'ora nelle conversioni tra una stringa e DateTime. |
XmlDictionaryReaderQuotaTypes |
Enumera i valori di quota configurabili per XmlDictionaryReaders. |
XmlNamespaceScope |
Definisce l'ambito dello spazio dei nomi. |
XmlNodeChangedAction |
Specifica il tipo di modifica del nodo. |
XmlNodeOrder |
Descrive l'ordine dei documenti di un nodo confrontato con un secondo nodo. |
XmlNodeType |
Specifica il tipo di nodo. |
XmlOutputMethod |
Specifica il metodo utilizzato per la serializzazione dell'output del XmlWriter. |
XmlSpace |
Specifica l'ambito |
XmlTokenizedType |
Rappresenta il tipo XML della stringa. In tal modo la stringa può essere letta come un tipo XML particolare, ad esempio un tipo sezione CDATA. |
Delegati
OnXmlDictionaryReaderClose |
|
XmlNodeChangedEventHandler |
Rappresenta il metodo che gestisce gli eventi NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving. |
Commenti
Standard supportati
Lo System.Xml spazio dei nomi supporta questi standard:
Spazi dei nomi XML, sia a livello di flusso che DOM
Vedere la sezione Differenze dalle specifiche W3C per due casi in cui le classi XML differiscono dalle raccomandazioni W3C.
Spazi dei nomi correlati
.NET fornisce anche altri spazi dei nomi per le operazioni correlate a XML. Per un elenco, descrizioni e collegamenti, vedere spazi dei nomiSystem.Xml.
Elaborazione asincrona di XML
Le System.Xml.XmlReader classi e System.Xml.XmlWriter includono diversi metodi asincroni basati sul modello di programmazione asincrona. Questi metodi possono essere identificati dalla stringa "Async" alla fine dei nomi. Con questi metodi è possibile scrivere codice asincrono simile al codice sincrono ed è possibile eseguire facilmente la migrazione del codice sincrono esistente al codice asincrono.
Usare i metodi asincroni nelle app in cui è presente una latenza significativa del flusso di rete. Evitare di usare le API asincrone per il flusso di memoria o le operazioni di lettura/scrittura di file locali. Il flusso di input, XmlTextReadere XmlTextWriter deve supportare anche operazioni asincrone. In caso contrario, i thread verranno comunque bloccati dalle operazioni di I/O.
Non è consigliabile combinare chiamate di funzione sincrone e asincrone, perché è possibile dimenticare di usare la
await
parola chiave o usare un'API sincrona in cui è necessaria una funzione asincrona.Non impostare il XmlReaderSettings.Async flag
true
o XmlWriterSettings.Async su se non si intende usare un metodo asincrono.Se si dimentica di specificare la
await
parola chiave quando si chiama un metodo asincrono, i risultati non deterministici sono: è possibile ricevere il risultato previsto o un'eccezione.Quando un XmlReader oggetto legge un nodo di testo di grandi dimensioni, può memorizzare nella cache solo un valore di testo parziale e restituire il nodo di testo, in modo che il recupero della XmlReader.Value proprietà possa essere bloccato da un'operazione di I/O. Utilizzare il metodo per ottenere il valore di testo in modalità asincrona oppure usare il XmlReader.GetValueAsyncXmlReader.ReadValueChunkAsync metodo per leggere un blocco di testo di grandi dimensioni in blocchi.
Quando si usa un XmlWriter oggetto, chiamare il metodo prima di chiamare XmlWriter.Close per evitare di XmlWriter.FlushAsync bloccare un'operazione di I/O.
Differenze rispetto alle specifiche W3C
In due casi che comportano vincoli sui componenti dello schema del gruppo di modelli, lo System.Xml spazio dei nomi differisce dalle raccomandazioni W3C.
Coerenza nelle dichiarazioni degli elementi:
In alcuni casi, quando vengono usati gruppi di sostituzione, l'implementazione non soddisfa il System.Xml "Vincolo componente schema: dichiarazioni di elemento coerenti", descritto nella sezione Vincoli sui componenti dello schema del gruppo di modelli della specifica W3C.
Ad esempio, lo schema seguente include elementi con lo stesso nome, ma tipi diversi nello stesso modello di contenuto e vengono usati gruppi di sostituzione. Sebbene tale schema debba generare un errore, System.Xml lo compila e lo convalida senza errori.
<?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 questo schema il tipo t3
contiene una sequenza di elementi. A causa della sostituzione, il riferimento all'elemento e1
della sequenza può restituire un elemento e1
di tipo t1
o un elemento e2
di tipo t2
. Quest'ultimo caso comporta una sequenza di due e2
elementi, dove uno è di tipo t2
e l'altro è di tipo xs:int
.
Attribuzione di particelle univoca:
Nelle condizioni seguenti l'implementazione non soddisfa il System.Xml "Vincolo componente schema: attribuzione di particelle univoca", descritto nella sezione Vincoli nei componenti dello schema del gruppo di modelli della specifica W3C.
Uno degli elementi nel gruppo fa riferimento a un altro elemento.
L'elemento a cui si fa riferimento è un elemento Head di un gruppo di sostituzione.
Il gruppo di sostituzione contiene un elemento con lo stesso nome di uno degli elementi del gruppo.
La cardinalità dell'elemento che fa riferimento all'elemento head del gruppo di sostituzione e all'elemento con lo stesso nome di un elemento del gruppo di sostituzione non è fisso (minOccurs < maxOccurs).
La definizione dell'elemento che fa riferimento al gruppo di sostituzione precede la definizione dell'elemento con lo stesso nome di un elemento di sostituzione.
Sebbene, ad esempio, nello schema seguente il modello di contenuto sia ambiguo e debba generare un errore di compilazione, System.Xml lo compila senza errori.
<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>
Se si tenta di convalidare il codice XML seguente rispetto allo schema precedente, la convalida avrà esito negativo con il messaggio seguente: "L'elemento 'e3' ha un elemento figlio non valido 'e2'". Verrà generata un'eccezione XmlSchemaValidationException .
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
Per risolvere questo problema, è possibile scambiare dichiarazioni di elemento nel documento XSD. Ad esempio:
<xs:sequence>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
diventa:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Ecco un altro esempio dello stesso problema:
<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>
Se si tenta di convalidare il codice XML seguente rispetto allo schema precedente, la convalida avrà esito negativo con l'eccezione seguente: "Eccezione non gestita: System.Xml. Schema.XmlSchemaValidationException: l'elemento el 'e2' non è valido - Il valore 'abc' non è valido in base al relativo tipo 'http://www.w3.org/2001/XMLSchema:int'
di dati - La stringa 'abc' non è un valore Int32 valido."
<e3><e2>abc</e2></e3>
Considerazioni relative alla sicurezza
I tipi e i membri nello System.Xml spazio dei nomi si basano sul sistema di sicurezza .NET. Le sezioni seguenti illustrano i problemi di sicurezza specifici delle tecnologie XML.
Si noti anche che quando si usano i System.Xml tipi e i membri, se il codice XML contiene dati che hanno potenziali implicazioni sulla privacy, è necessario implementare l'app in modo da rispettare la privacy degli utenti finali.
Accesso esterno
Diverse tecnologie XML consentono di recuperare altri documenti durante l'elaborazione. Ad esempio, una DTD (Document Type Definition) si può trovare nel documento analizzato. La DTD può anche risiedere in un documento esterno a cui fa riferimento il documento analizzato. Le tecnologie XSD (XML Schema Definition Language) e XSLT consentono inoltre di includere informazioni da altri file. Queste risorse esterne possono presentare alcuni problemi di sicurezza. Ad esempio, si vuole assicurarsi che l'app recupera i file solo dai siti attendibili e che il file recuperato non contenga dati dannosi.
La XmlUrlResolver classe viene usata per caricare documenti XML e per risolvere le risorse esterne, ad esempio entità, DTD o schemi, e importare o includere direttive.
È possibile eseguire l'override di questa classe e specificare l'oggetto XmlResolver da usare. Usare la classe XmlSecureResolver se è necessario aprire una risorsa che non si controlla o che non è considerata affidabile. Il tipo XmlSecureResolver include un tipo XmlResolver e consente di limitare le risorse a cui ha accesso il tipo XmlResolver sottostante.
Denial of Service
Gli scenari seguenti sono considerati meno vulnerabili agli attacchi di tipo Denial of Service in quanto le classi System.Xml forniscono un sistema di protezione da tali attacchi.
Analisi dei dati XML di tipo text.
Analisi dei dati XML binari se i dati XML binari sono stati generati da Microsoft SQL Server.
Scrittura di documenti e frammenti XML da origini dati nel file system, flussi, un tipo TextWriter o un tipo StringBuilder.
Caricamento di documenti nell'oggetto DOM (Document Object Model) se si sta utilizzando un oggetto XmlReader e XmlReaderSettings.DtdProcessing impostato su DtdProcessing.Prohibit.
Esplorazione dell'oggetto DOM.
Gli scenari seguenti non sono consigliabili se ci si occupa di problemi relativi agli attacchi di tipo Denial of Service o se si lavora in un ambiente non attendibile.
Elaborazione della DTD.
Elaborazione dello schema. Ciò include l'aggiunta di uno schema non attendibile alla raccolta di schemi, la compilazione di uno schema non attendibile e la convalida tramite uno schema non attendibile.
Elaborazione XSLT.
Analisi di un qualsiasi flusso arbitrario di dati XML binari forniti dall'utente.
Operazioni DOM quali la creazione di query, la modifica, lo spostamento tra i sottoalberi dei documenti e il salvataggio degli oggetti DOM.
Se si tratta di problemi di servizio denial of service o se si tratta di origini non attendibili, non abilitare l'elaborazione DTD. Questa opzione è disabilitata per impostazione predefinita sugli XmlReader oggetti creati dal XmlReader.Create metodo.
Nota
L'oggetto XmlTextReader consente l'elaborazione della DTD per impostazione predefinita. Utilizzare la proprietà XmlTextReader.DtdProcessing per disabilitare questa funzione.
Se l'elaborazione DTD è abilitata, è possibile usare la XmlSecureResolver classe per limitare le risorse a cui è XmlReader possibile accedere. È anche possibile progettare l'app in modo che l'elaborazione XML sia vincolata dalla memoria e dal tempo. Ad esempio, è possibile configurare i limiti di timeout nell'app ASP.NET.
Considerazioni sull'elaborazione
Poiché i documenti XML possono contenere riferimenti ad altri file, è difficile determinare quanta capacità di elaborazione sia necessaria per analizzare un documento XML. Ad esempio, i documenti XML possono includere una DTD. Se la DTD contiene entità annidate o modelli di contenuto complesso, potrebbe essere necessaria una quantità eccessiva di tempo per analizzare il documento.
Quando si utilizza XmlReader, è possibile limitare le dimensioni del documento che è possibile analizzare impostando la proprietà XmlReaderSettings.MaxCharactersInDocument. Per limitare il numero di caratteri risultanti dall'espansione di entità, impostare la proprietà XmlReaderSettings.MaxCharactersFromEntities. Per gli esempi relativi all'impostazione di queste proprietà, vedere gli argomenti di riferimento appropriati.
Le tecnologie XSD e XSLT consentono inoltre di migliorare le prestazioni dell'elaborazione. Ad esempio, è possibile creare un XML Schema che richiede una quantità maggiore di tempo per l'elaborazione quando la valutazione riguarda un documento relativamente breve. È inoltre possibile incorporare blocchi di script in un foglio di stile XSLT. Entrambi i casi rappresentano una potenziale minaccia di sicurezza per l'app.
Quando si crea un'app che usa la XslCompiledTransform classe, è necessario tenere presente gli elementi seguenti e le relative implicazioni:
Gli script XSLT sono disattivati per impostazione predefinita. Lo script con XSLT deve essere abilitato solo se è necessario il supporto per gli script e solo all'interno di un ambiente completamente attendibile.
La funzionalità XSLT
document()
è disattivata per impostazione predefinita. Se si abilita la funzionedocument()
, limitare le risorse a cui è possibile accedere passando un oggetto XmlSecureResolver al metodo XslCompiledTransform.Transform.Gli oggetti di estensione sono abilitati per impostazione predefinita. Se un oggetto XsltArgumentList contenente oggetti di estensione viene passato al metodo XslCompiledTransform.Transform, vengono utilizzati gli oggetti di estensione.
Nei fogli di stile XSLT possono essere inclusi riferimenti ad altri file e a blocchi di script incorporati. Un utente malintenzionato può sfruttare questa situazione fornendo dati o fogli di stile che, quando eseguiti, possono determinare l'elaborazione continua da parte del sistema finché le risorse del computer diventeranno insufficienti.
Le app XSLT eseguite in un ambiente trust misto possono comportare lo spoofing dei fogli di stile. Ad esempio, un utente malintenzionato può caricare un oggetto con un foglio di stile dannoso e trasferirlo a un altro utente che in un secondo momento chiama il metodo XslCompiledTransform.Transform ed esegue la trasformazione.
I problemi relativi alla sicurezza possono essere limitati non attivando gli script o la funzionalità document()
, a meno che il foglio di stile non provenga da un'origine attendibile, e non accettando gli oggetti XslCompiledTransform, i fogli di stile XSLT o i dati di origine XML da un'origine non attendibile.
Gestione delle eccezioni
Le eccezioni generate dai componenti di livello inferiore possono divulgare le informazioni sul percorso che non si desidera esporre all'app. Le app devono intercettare le eccezioni ed elaborarle in modo appropriato.