我无法解析此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}'意外的元素。
答案 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文档实例才有效。