Controllo della conformità dei dati con XmlReader
Per impostazione predefinita, gli oggetti XmlReader creati dal metodo Create sono più conformi rispetto all'implementazione di XmlTextReader. Gli oggetti XmlReader creati dal metodo Create supportano per impostazione predefinita le seguenti funzionalità:
Normalizzazione di caratteri di nuova riga.
Espansione delle entità.
Aggiunta di attributi predefiniti.
Le proprietà XmlReaderSettings.CheckCharacters e XmlReaderSettings.ConformanceLevel consentono di specificare il tipo di controlli di conformità da abilitare per l'oggetto XmlReader creato.
Impostazione di CheckCharacters
La proprietà CheckCharacters nella classe XmlReaderSettings imposta il lettore dati in modo da controllare i caratteri e generare un tipo XmlException se uno o più caratteri sono al di fuori dell'intervallo dei caratteri XML validi. Quando è abilitato il controllo dei caratteri, è garantito quanto segue:
Tutti i caratteri nel documento sono compresi nell'intervallo di caratteri XML validi definito nel documento W3C XML 1.0 Recommendation.
Tutti i nomi XML sono validi. Se, ad esempio, il nome di un elemento inizia con un numero, viene generato un tipo XmlException. Per ulteriori informazioni, vedere all'indirizzo http://www.w3.org/TR/REC-xml#NT-Name (informazioni in lingua inglese).
Per impostazione predefinita, il controllo dei caratteri è abilitato. Se il lettore elabora dati di testo, viene sempre eseguito il controllo della validità dei nomi XML, anche quando la proprietà CheckCharacters è impostata su false.
Impostazione di ConformanceLevel
La proprietà ConformanceLevel nella classe XmlReaderSettings consente di configurare XmlReader per controllare e garantire che il flusso di dati letti sia conforme a uno specifico set di regole. In base al livello di conformità specificato, è possibile controllare i dati XML per verificare che siano conformi alle regole per un documento o un frammento di documento XML 1.0 in formato corretto. Se i dati non sono conformi, verrà generato un tipo XmlException. L'impostazione predefinita è ConformanceLevel.Document.
![]() |
---|
Se il lettore è configurato per supportare ConformanceLevel.Fragment, ma i dati XML contengono una definizione del tipo di documento (DTD), viene generato un tipo XmlException.La raccomandazione XML 1.0 richiede la conformità a livello di documento in presenza di una DTD. |
Valore di ConformanceLevel |
Descrizione |
---|---|
Document |
I dati XML sono conformi alle regole per un documento XML 1.0 corretto. Questo livello di controllo assicura che qualunque processore possa utilizzare il flusso di dati letto come un documento XML 1.0. Il lettore verifica quanto segue:
|
Fragment |
I dati XML sono conformi alle regole per un frammento di documento XML 1.0 corretto. Con questa impostazione vengono accettati i dati XML con più elementi radice o i nodi di tipo text al livello principale. Questo livello di controllo assicura che qualunque processore possa utilizzare il flusso di dati letto come un'entità analizzata esterna XML 1.0. ![]()
La DTD non è consentita nei frammenti.
|
Auto |
Il lettore decide il livello di controllo della conformità da applicare in base ai dati in arrivo. Il controllo di conformità del documento viene applicato se i dati XML contengono informazioni DTD. Il controllo di conformità del frammento viene applicato se i dati XML contengono uno degli elementi seguenti:
Viene generato un tipo XmlException se si verifica un conflitto, ad esempio quando sono presenti un nodo di tipo text e una DTD a livello radice. È possibile utilizzare questa impostazione in scenari di inclusione quando viene utilizzato il metodo Create per aggiungere ulteriori funzionalità a un XmlReader esistente. In questo caso il livello ConformanceLevel.Auto non aggiunge nuovi controlli di conformità. Il controllo di conformità è affidato al XmlReader che viene incluso. |
Oggetti XmlTextReader, XmlValidatingReader e XmlNodeReader
L'impostazione di ConformanceLevel presenta il seguente comportamento in associazione con oggetti XmlTextReader, XmlValidatingReader o XmlNodeReader.
Se l'oggetto XmlReader non è stato creato utilizzando il metodo Create, il livello previsto di conformità è Document. Di conseguenza, se si decide di includere questa istanza di XmlReader in un altro oggetto XmlReader, quando si crea il nuovo oggetto XmlReader è necessario che il livello di conformità specificato sia Document o Auto.
Se l'oggetto sottostante XmlTextReader o XmlValidatingReader è stato costruito usando l'oggetto XmlParserContext e XmlNodeType.Element, è anche possibile applicare l'impostazione Fragment.
Esempio
Il codice seguente crea un lettore che impone la conformità a livello di frammento.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
Dim reader as XmlReader = XmlReader.Create(new StringReader(xmlString), settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);