Metodi System.Xml.XmlReader.Create
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
La maggior parte degli Create overload include un settings
parametro che accetta un XmlReaderSettings oggetto . È possibile usare questo oggetto per:
- Specificare le funzionalità che si desidera supportare nell'oggetto XmlReader .
- Riutilizzare l'oggetto XmlReaderSettings per creare più lettori. In tal modo è possibile utilizzare le stesse impostazioni per creare più lettori con la stessa funzionalità. In alternativa, è possibile modificare le impostazioni in un'istanza XmlReaderSettings e creare un nuovo lettore con un set diverso di funzionalità.
- Aggiungere funzionalità a un lettore XML esistente. Il metodo Create può accettare un altro oggetto XmlReader. L'oggetto sottostante XmlReader può essere un lettore definito dall'utente, un XmlTextReader oggetto o un'altra XmlReader istanza a cui si desidera aggiungere funzionalità aggiuntive.
- Sfruttare appieno le funzionalità, ad esempio il controllo della conformità migliore e la conformità alla raccomandazione XML 1.0 (quarta edizione) disponibile solo per XmlReader gli oggetti creati dal metodo statico Create .
Nota
Anche se .NET include implementazioni concrete della XmlReader classe , ad esempio XmlTextReader, XmlNodeReadere le XmlValidatingReader classi , è consigliabile creare XmlReader istanze usando il Create metodo .
Impostazioni predefinite
Se si usa un Create overload che non accetta un XmlReaderSettings oggetto , vengono usate le impostazioni predefinite seguenti:
Impostazione | Valori predefiniti |
---|---|
CheckCharacters | true |
ConformanceLevel | ConformanceLevel.Document |
IgnoreComments | false |
IgnoreProcessingInstructions | false |
IgnoreWhitespace | false |
LineNumberOffset | 0 |
LinePositionOffset | 0 |
NameTable | null |
DtdProcessing | Prohibit |
Schemas | Oggetto XmlSchemaSet vuoto. |
ValidationFlags | ProcessIdentityConstraints Abilitato |
ValidationType | None |
XmlResolver | null |
Impostazioni per scenari comuni
Di seguito sono riportate le XmlReaderSettings proprietà che è necessario impostare per alcuni degli scenari tipici del lettore XML.
Requisito | Set |
---|---|
I dati devono essere un documento XML ben formato. | Da ConformanceLevel a Document. |
I dati devono essere un'entità analizzata XML ben formata. | Da ConformanceLevel a Fragment. |
I dati devono essere convalidati in base a una DTD. | DtdProcessing a Parse Da ValidationType a DTD. |
I dati devono essere convalidati in base a uno schema XML. | ValidationType a Schema Schemas per l'oggetto XmlSchemaSet da utilizzare per la convalida. Si noti che XmlReader non supporta la convalida dello schema XML-Data Reduced (XDR). |
I dati devono essere convalidati in base a uno schema XML inline. | ValidationType a Schema Da ValidationFlags a ProcessInlineSchema. |
Supporto dei tipi. | ValidationType a Schema Schemas per l'oggetto XmlSchemaSet da utilizzare. |
XmlReader non supporta la convalida dello schema XML-Data Reduced (XDR).
Programmazione asincrona
In modalità sincrona, il Create metodo legge il primo blocco di dati dal buffer del file, del flusso o del lettore di testo. Ciò può generare un'eccezione se un'operazione di I/O non riesce. In modalità asincrona, la prima operazione di I/O si verifica con un'operazione di lettura, pertanto le eccezioni che si verificano verranno generate quando si verifica l'operazione di lettura.
Considerazioni sulla sicurezza
Per impostazione predefinita, XmlReader usa un XmlUrlResolver oggetto senza credenziali utente per aprire le risorse. Ciò significa che, per impostazione predefinita, il lettore XML può accedere a qualsiasi posizione che non richiede credenziali. Usare la proprietà per controllare l'accesso XmlResolver alle risorse:
- Impostare XmlResolver su un XmlSecureResolver oggetto per limitare le risorse a cui può accedere il lettore XML oppure...
- Impostare XmlResolver su per
null
impedire al lettore XML di aprire risorse esterne.
Esempi
In questo esempio viene creato un lettore XML che rimuove spazi vuoti non significativi, rimuove i commenti ed esegue il controllo della conformità a livello di frammento.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);
Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
Nell'esempio seguente viene usato un oggetto XmlUrlResolver con credenziali predefinite per accedere a un file.
// Set the reader settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
' Set the reader settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.IgnoreComments = true
settings.IgnoreProcessingInstructions = true
settings.IgnoreWhitespace = true
// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials
' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)
Il codice seguente esegue il wrapping di un'istanza del lettore in un altro lettore.
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);
Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
Questo esempio concatena i lettori per aggiungere la convalida DTD e XML Schema.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings); // XML Schema Validation
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings) ' XML Schema Validation