【问题标题】:How to validate xml file against xsd with namespace如何使用命名空间针对 xsd 验证 xml 文件
【发布时间】:2014-08-12 11:07:50
【问题描述】:

我想验证 xml 文件是否包含带有 xsd 文件的命名空间。

我的 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfNumberOfCars xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Api.CarWEB.Services.Cars">
    <NumberOfCars>
         <Number>417</Number>
    </NumberOfCars>
</ArrayOfNumberOfCars>

我的 xsd 文件:

    <xsd:element name="ArrayOfNumberOfCars">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="1" maxOccurs="1" ref="NumberOfCars" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="NumberOfCars">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element minOccurs="1" maxOccurs="1" ref="Number" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Number">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:minLength value="0" />
                <xsd:maxLength value="15" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>

Affer 调用方法验证,我得到以下异常:

org.xml.sax.SAXException: javax.xml.stream.XMLStreamException: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 86; cvc-elt.1: Cannot find the declaration of element 'ArrayOfNumberOfCars'.

每个人都知道如何在 xsd 文件中为名称页配置验证。请帮帮我。

谢谢

【问题讨论】:

  • 还有一点:错误消息指的是一个元素“ArrayOfCar”,它既没有出现在您的实例文档中,也没有出现在您的架构中。大概这只是准备您的问题时的一个错字?

标签: java xml validation xsd


【解决方案1】:

您尚未显示架构的关键部分,其中定义了 targetNamespace。

如果架构中的 targetNamespace 与您的实例文档中的匹配,那么您应该没有问题,并且您不需要做任何特别的事情。

如果它们不匹配,则您的实例文档无效,使其有效的唯一方法是将其转换为正确命名空间中的不同文档(或者没有命名空间,如果这是架构定义的) .

【讨论】:

    【解决方案2】:

    正确的xsd是这个..

    <?xml version="1.0" encoding="UTF-8" ?>
    <xsd:schema elementFormDefault="qualified"
        targetNamespace="http://schemas.datacontract.org/2004/07/Api.CarWEB.Services.Cars"
        xmlns:prefix="http://schemas.datacontract.org/2004/07/Api.CarWEB.Services.Cars"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
        <xsd:element name="ArrayOfNumberOfCars">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element minOccurs="1" maxOccurs="1" ref="prefix:NumberOfCars" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    
        <xsd:element name="NumberOfCars">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element minOccurs="1" maxOccurs="1" ref="prefix:Number" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    
        <xsd:element name="Number">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:minLength value="0" />
                    <xsd:maxLength value="15" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
    
    </xsd:schema>
    

    xsd 验证通过这种方式工作

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 2010-10-23
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多