无法解析XML文档

时间:2012-12-20 02:04:46

标签: xml xsd xml-validation

我无法解析此xml。任何人都可以帮我解决这个问题

这是我的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<gea-sr:GETOFFERSResponse 
  xmlns:gea-sr="http://schemas.com/soap/requests" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://schemas.com/soap/requests 
                      file:///C:/Users/Desktop/SMCWebResponse.xsd">
    <requestdate dateDescription="Wed" requestdate="2012-12-19"/>
    <requestdate dateDescription="Mon" requestdate="2012-12-24">
        <offer timeperiod="0800-1200" timeperioddesc="AM 8-12">
            <offertoken/>
            <offertext>12657131N3AM 0004 T000000000N</offertext>
            <offerremarks/>
            <offerflag>F</offerflag>
        </offer>
        <offer timeperiod="1300-1700" timeperioddesc="PM 1-5">
            <offertoken/>
            <offertext>12657131N3AA 0006 T000000000N</offertext>
            <offerremarks/>
            <offerflag>F</offerflag>
        </offer>
    </requestdate>
</gea-sr:GETOFFERSResponse>"

这是我尝试用于解析的XSD快照

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:gea-sr="http://schemas.com/soap/requests" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xsd:complexType name="requestdateType">
        <xsd:sequence>
            <xsd:element name="offer" type="offerType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="requestdate" type="xsd:date"/>
        <xsd:attribute name="datedescription">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="10"/>
                    <xsd:whiteSpace value="collapse"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

<xsd:complexType name="offerType">
        <xsd:all>
            <xsd:element name="offertoken" type="offertokenType"/>
            <xsd:element name="offertext" type="offertextType"/>
            <xsd:element name="offerremarks" type="offerremarksType"/>
            <xsd:element name="offerflag" type="offerflagType"/>
        </xsd:all>
        <xsd:attribute name="timeperiod" type="timespanType"/>
        <xsd:attribute name="timeperioddescription">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="25"/>
                    <xsd:whiteSpace value="collapse"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

<xsd:simpleType name="timespanType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="0800-1200"/>
            <xsd:enumeration value="1300-1700"/>
            <xsd:enumeration value="0800-1700"/>
            <xsd:enumeration value="1000-1700"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offertokenType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
            <xsd:whiteSpace value="collapse"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offertextType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
            <xsd:minLength value="19"/>
            <xsd:whiteSpace value="collapse"/>
            <xsd:pattern value="[^\s].*"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offerremarksType">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="50"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="offerflagType">
        <xsd:restriction base="xsd:string">
            <xsd:whiteSpace value="collapse"/>
            <xsd:enumeration value="A"/>
            <xsd:enumeration value="F"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:element name="GETOFFERSResponse">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="requestdate" type="gea-sr:requestdateType" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

我收到错误 cvc-elt.5.2.1:该元素对于实际类型定义“{anonymous}”无效。 cvc-model-group:元素类型'{anonymous}'意外的元素。

1 个答案:

答案 0 :(得分:1)

[首先,一个术语问题:您在解析XML文档时没有问题;您的XML格式正确,并且没有XML解析器在解析它时会遇到任何问题。您无法验证您的XML文档。这种差异使一些用户感到迂腐,但对于那些可能能够回答这类问题的人来说很重要,因此理解这种区别对你有兴趣。]

这里有几个问题。

  • 在您的XML实例中,元素gea-sr:GETOFFERSResponse位于命名空间http://schemas.com/soap/requests中。但是,您显示的XSD架构文档声明了一个名为GETOFFERSResponse的元素,该元素根本没有分配给任何命名空间(架构文档没有目标命名空间)。

  • 如果将targetNamespace="http://schemas.com/soap/requests"添加到架构文档中,则会遇到问题,因为架构文档中的声明引用了许多使用无前缀名称的类型(因此引用是指没有命名空间的类型)名称)。

  • 将前缀gea-sr添加到适当的引用中可以消除这些错误并导致问题的第三个问题:您的架构说本地元素将位于目标命名空间中,但是在您的文档实例中GETOFFERSResponse的子节点不是命名空间限定的。您可以将GETOFFERSResponse的子项放入gea-sr名称空间,也可以将模式设置为elementFormDefault = "unqualified"

  • 现在我们发现类型定义为元素requestdate声明了一个名为datedescription的属性,但该实例使用名为dateDescription的属性。 offer元素在模式中有一个名为timeperioddescription的属性,但在XML实例中有一个名为timeperioddesc的属性。

    可以通过使架构和实例达成一致来解决这些问题。

解决这些问题后,您的XML文档实例才有效。