如何使用命名空间对xsd验证xml文件

时间:2014-08-12 11:07:50

标签: java xml validation xsd

我想验证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 call方法验证,我得到了例外:

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文件中为namespage配置验证。请帮帮我。

由于

2 个答案:

答案 0 :(得分:1)

您还没有展示架构的关键部分,其中定义了targetNamespace。

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

如果它们不匹配,那么您的实例文档无效,并且使其有效的唯一方法是将其转换为正确名称空间中的不同文档(或者没有名称空间,如果这样做的话。 s架构定义的内容。

答案 1 :(得分:0)

正确的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验证工作

相关问题