2012-01-18 42 views
1

我有以下验证XML模式在Java中使用前缀

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

这里的XML消息是我的架构

<?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。 任何帮助表示赞赏

回答

2

看看架构元素的targetNamespaceelementFormDefault属性。

+0

谢谢。就是这样!我添加了以下内容并修复了它elementFormDefault =“qualified” – 2012-01-18 23:29:23

+0

很高兴为您提供帮助。按照惯例,通过单击左侧的复选标记“接受”您的问题的最佳答案。 – 2012-01-19 06:36:27