3

我在 java 中使用我的 xsd 验证我的 xml:

javax.xml.validation.SchemaFactory
.newInstance("http://www.w3.org/2001/XMLSchema")
.newSchema(new java.io.File(schemaPath))
.newValidator()
.validate(new javax.xml.transform.stream.StreamSource(new java.io.FileInputStream(xmlPath)));

我收到以下错误:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 18; cvc-elt.1: Deklaration des Elements "WrappedBodyText" kann nicht gefunden werden.

我将我的 xml 缩减为以下内容:

<WrappedBodyText></WrappedBodyText>

我将我的 xsd 减少到:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://compa.ny/customer/schema/Wrapper"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:Wrapper="http://compa.ny/customer/schema/Wrapper"
        xmlns:WrapperType="http://compa.ny/customer/schema/WrapperType"
        xmlns:standardservice="http://compa.ny/standard/service/schema">

    <complexType name="WrappedBodyText">
    </complexType>
</schema>

我在这里或其他论坛上查看了几篇帖子,但我发现的错误似乎都不适用。请帮忙

4

1 回答 1

2

据我了解,一个 complexType 的单一定义是不够的。我也必须定义一个元素:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://compa.ny/customer/schema/Wrapper"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:Wrapper="http://compa.ny/customer/schema/Wrapper"
        xmlns:WrapperType="http://compa.ny/customer/schema/WrapperType"
        xmlns:standardservice="http://compa.ny/standard/service/schema">

    <complexType name="WrappedBodyText">
    </complexType>

    <element name="WrappedBodyText" type="Wrapper:WrappedBodyText"/>
</schema>

但是我的 xml 实例中也有一个错误。验证器发现一个元素 WrappedBodyText,其命名空间为空,但期望在定义的 targetNamespace 中有一个元素。所以我也改变了xml实例:

<WrappedBodyText xmlns="http://compa.ny/customer/schema/Wrapper"></WrappedBodyText>

我猜这两个错误的组合是最糟糕的部分。

于 2013-10-01T07:58:08.373 回答