使用前缀验证java中的XML模式

时间:2012-01-18 22:26:23

标签: xml validation

我在

下面有一条xml消息
<web:Add xmlns:web="http://my/web/">
<web:a>1</web:a>
<web:b>2</web:b>
</web:Add>

这是我的架构

<?xml version="1.0" encoding="utf-8"?>
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" >
 <s:element name="Add">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="a" type="s:int" />
        <s:element minOccurs="1" maxOccurs="1" name="b" type="s:int" />
      </s:sequence>
    </s:complexType>
  </s:element>
</s:schema>

这是我的代码

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
File f = new File("C:\\temp\\my.xsd");
Schema schema = factory.newSchema(f);
Validator validator = schema.newValidator();
Document requestDoc = getDocumentFromString(request,true);
validator.validate(new DOMSource(requestDoc));

为什么这会失败 cvc-complex-type.2.4.a:从元素'web:a'开始发现无效内容。预计会有一个“{a}”。

如果我修改消息并为这样的元素取前缀oul

<web:Add xmlns:web="http://my/web/">
<a>1</a>
<b>2</b>
</web:Add>

然后一切正常。为什么?这两个消息都是提供的架构的有效xml。 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

查看架构元素的targetNamespaceelementFormDefault属性。