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