Was ich versuche zu tun, ist XML gegen eine XSD validieren. Das ist alles ziemlich einfach, aber ich habe ein Problem mit XML ohne Namespace. C# überprüft nur das XML, wenn der Namespace mit dem Zielnamespace des XSD übereinstimmt. Dies scheint richtig zu sein, aber ein XML ohne Namespace oder ein anderes, dann sollte das SchemaSet eine Ausnahme geben. Gibt es eine Eigenschaft oder eine Einstellung, um dies zu erreichen? Oder muss ich den Namespace manuell abrufen, indem ich das xmlns-Attribut der XML-Datei lese?XML-Validierung und Namespaces in. NET
Ein Beispiel clearify:
Code:
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://example.com", @"test.xsd");
settings.Schemas.Add("http://example.com/v2", @"test2.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader r = XmlReader.Create(@"test.xml", settings);
XmlReader r = XmlReader.Create(new StringReader(xml), settings);
XmlDocument doc = new XmlDocument();
try
{
doc.Load(r);
}
catch (XmlSchemaValidationException ex)
{
Console.WriteLine(ex.Message);
}
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com" targetNamespace="http://example.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="test">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+\.+[0-9]+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
Valid XML:
<test xmlns="http://example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">112.1</test>
Ungültige XML, das nicht bestätigen wird:
<hello xmlns="http://example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">112.1</hello>
Fehler: The 'http://example.com:hello' element is not declared
.
Ungültige XML, wird aber validieren, weil Namespace nicht vorhanden ist:
<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">112.1</hello>
Wie kann ich dieses Problem beheben?
Jede Hilfe sehr geschätzt.
Nein - ich habe es gerade versucht und der Validator feuert den Handler überhaupt nicht ab. Es scheint, dass .Net dies nicht als Warnung ansieht. –