Überprüfen der Datenkonformität mit "XmlReader"
Mithilfe der Create-Methode erstellte XmlReader-Objekte weisen standardmäßig eine größere Konformität als die XmlTextReader-Implementierung auf. Von der Create-Methode erstellte XmlReader-Objekte unterstützen standardmäßig die folgenden Funktionen:
Normalisieren von Zeilenwechselzeichen.
Erweitern von Entitäten.
Hinzufügen von Standardattributen.
Die XmlReaderSettings.CheckCharacters-Eigenschaft und die XmlReaderSettings.ConformanceLevel-Eigenschaft ermöglichen Ihnen, die Typen der Übereinstimmungsprüfungen anzugeben, die für das erstellte XmlReader-Objekt aktiviert werden sollen.
CheckCharacters-Einstellung
Die CheckCharacters-Eigenschaft der XmlReaderSettings-Klasse weist den Reader an, Zeichen zu überprüfen und eine XmlException auszulösen, wenn sich Zeichen außerhalb des Bereichs der gültigen XML-Zeichen befinden. Bei aktivierter Zeichenüberprüfung ist Folgendes sichergestellt:
Alle Zeichen im Dokument befinden sich innerhalb des im W3C-Dokument Extensible Markup Language (XML) 1.0 definierten Gültigkeitsbereichs für XML-Zeichen.
Alle XML-Namen sind gültig. Wenn zum Beispiel der Name eines Elements mit einer Zahl beginnt, wird eine XmlException ausgelöst. Weitere Informationen finden Sie unter http://www.w3.org/TR/REC-xml\#NT-Name.
In der Standardeinstellung ist die Zeichenüberprüfung aktiviert. Bei der Verarbeitung von Textdaten überprüft der Reader die XML-Namen immer auf Gültigkeit, auch wenn die CheckCharacters-Eigenschaft auf false festgelegt ist.
ConformanceLevel-Einstellung
Die ConformanceLevel-Eigenschaft der XmlReaderSettings-Klasse konfiguriert den XmlReader so, dass er überprüft und garantiert, dass der gelesene Stream einer bestimmten Gruppe von Regeln entspricht. Je nach angegebener Übereinstimmungsebene können die XML-Daten auf Übereinstimmung mit den Regeln für ein wohlgeformtes XML 1.0-Dokument oder -Dokumentfragment überprüft werden. Wenn die Daten nicht konform sind, wird eine XmlException ausgelöst. Die Standardeinstellung ist ConformanceLevel.Document.
Hinweis |
---|
Wenn der Reader für die Unterstützung von ConformanceLevel.Fragment konfiguriert ist, die XML-Daten jedoch eine DTD (Dokumenttypdefinition) enthalten, wird eine XmlException ausgelöst.Gemäß XML 1.0-Empfehlung muss bei vorhandener DTD eine Übereinstimmung auf Dokumentebene vorliegen. |
ConformanceLevel-Wert |
Beschreibung |
---|---|
Dokument |
Die XML-Daten entsprechen den Regeln für ein wohlgeformtes XML 1.0-Dokument. Diese Ebene der Überprüfung sorgt dafür, dass alle Prozessoren den als XML 1.0-Dokument gelesenen Stream verwenden können. Folgendes wird vom Reader überprüft:
|
Fragment |
Die XML-Daten entsprechen den Regeln für ein wohlgeformtes XML 1.0-Dokumentfragment. Bei dieser Einstellung werden XML-Daten mit mehreren Stammelementen oder Textknoten der obersten Ebene akzeptiert. Diese Ebene der Überprüfung sorgt dafür, dass alle Prozessoren den als extern analysierte XML 1.0-Entität gelesenen Stream verwenden können.
Hinweis
DTD ist in Fragmenten nicht zulässig.
|
Auto |
Der Reader entscheidet anhand der eingehenden Daten, welche Ebene der Übereinstimmungsprüfung angewendet werden soll. Wenn die XML-Daten DTD-Informationen enthalten, wird die Übereinstimmungsprüfung für Dokumente angewendet. Die Übereinstimmungsprüfung für Fragmente wird angewendet, wenn die XML-Daten eines der folgenden Elemente enthalten:
Wenn ein Konflikt auftritt (z. B. wenn sich ein Textknoten und eine DTD auf der Stammebene befinden), wird eine XmlException ausgelöst. Diese Einstellung kann in Wrappingszenarios verwendet werden, wenn mithilfe der Create-Methode einem vorhandenen XmlReader zusätzliche Funktionen hinzugefügt werden. In diesem Fall fügt ConformanceLevel.Auto keine neue Übereinstimmungsprüfung hinzu. Die Übereinstimmungsprüfung wird dem XmlReader überlassen, für den ein Wrapper erstellt wird. |
XmlTextReader-, XmlValidatingReader- und XmlNodeReader-Objekte
Die ConformanceLevel-Einstellung weist beim Arbeiten mit den Objekten XmlTextReader, XmlValidatingReader und XmlNodeReader folgendes Verhalten auf.
Wenn das XmlReader-Objekt nicht mithilfe der Create-Methode erstellt wurde, entspricht die vorausgesetzte Übereinstimmungsebene Document. Wenn Sie diese XmlReader-Instanz beim Erstellen des neuen XmlReader-Objekts in einem anderen XmlReader-Objekt einbetten, muss als Übereinstimmungsebene entweder Document oder Auto angegeben sein.
Wenn das zugrundeliegende XmlTextReader-Objekt oder das zugrundeliegende XmlValidatingReader-Objekt mithilfe des XmlParserContext-Objekts und mithilfe von XmlNodeType.Element erstellt wurde, kann auch die Fragment-Einstellung angewendet werden.
Beispiel
Mit dem folgenden Code wird ein Reader erstellt, der eine Übereinstimmung auf Fragmentebene erzwingt.
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);
Siehe auch
Konzepte
Lesen von XML mit dem "XmlReader"