XML 模式 Beispiel aus Buch“Einstieg in XML”funktioniert nicht

问题描述 投票:0回答:1

在 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>
xml xsd xsd-validation
1个回答
0
投票

确实如此。解决方案是从直觉转向

   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 现在很高兴......

© www.soinside.com 2019 - 2024. All rights reserved.