在 einem einfachen C#-Programm lade die Datei bestellbeleg1.xml mit einem prüfenden XmlReader。 Das zugehörige XSD-Schema (bestellbeleg1.xsd) wird über schema.SourceUri = args[1] angegeben.贝姆拉登
XDocument tree = XDocument.Load(reader);
gibt die Valierung aus:
Validation error: Das bestellformular-Element wurde nicht deklariert.
Ist das ein Fehler in dem Beispiel des Buchs?
注意:eine eigene Kombi XML/XSD führt in meinem C#-Programm lediglich zu einer Validierungs-Warnung。
Hier die besagten Beispiele aus dem Buch:
<?xml version="1.0" encoding="UTF-8"?>
<bestellformular bestellnummer="01000" bestelldatum="2013-03-01"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="bestellbeleg1.xsd">
<kunde>
<name>Hanna Maier</name>
<strasse>Oststrasse 12</strasse>
<plz>40678</plz>
<ort>Düsseldorf</ort>
</kunde>
<positionen>
<position artikelnr="0045">
<beschreibung>Rollo XBP 312</beschreibung>
<gebinde>Stck</gebinde>
<menge>5</menge>
<europreis>50.00</europreis>
</position>
<position artikelnr="0023">
<beschreibung>Rollo MMX</beschreibung>
<gebinde>Stck</gebinde>
<menge>4</menge>
<europreis>40.00</europreis>
</position>
</positionen>
</bestellformular>
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="bestellformular" type="formular"/>
<xsd:complexType name="formular">
<xsd:sequence>
<xsd:element name="kunde" type="kunde"/>
<xsd:element name="positionen" type="positionen"/>
</xsd:sequence>
<xsd:attribute name="bestellnummer" type="xsd:short" use="required"/>
<xsd:attribute name="bestelldatum" type="xsd:date" use="required"/>
</xsd:complexType>
<xsd:complexType name="kunde">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="strasse" type="xsd:string"/>
<xsd:element name="plz" type="xsd:int"/>
<xsd:element name="ort" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="positionen">
<xsd:sequence>
<xsd:element name="position" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="beschreibung" type="xsd:string"/>
<xsd:element name="gebinde" type="gb"/>
<xsd:element name="menge" type="xsd:decimal"/>
<xsd:element name="europreis" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="artikelnr" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="gb">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Stck"/>
<xsd:enumeration value="kg"/>
<xsd:enumeration value="cm"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
确实如此。解决方案是从直觉转向
XmlSchema schema = new XmlSchema();
schema.SourceUri = args[1];
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(schema);
到
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", args[1]);
鉴于此 XmlSchemaSet,XmlReader 现在很高兴......