1

我无法解析这个 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}”出乎意料。

4

1 回答 1

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 文档实例就有效了。

于 2012-12-20T18:28:36.023 回答