我需要使用XmlBeans針對在以下XSD中聲明的(複雜)類型驗證以下XML。XmlBeans - 針對某個類型的XSD驗證,而不是元素
我的XSD:
<xs:schema targetNamespace="http://www.xxx.com/xmlns/osb/WS2CICS/program/PROG1/p1" attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns="http://www.xxx.com/xmlns/osb/WS2CICS/program/PROG1/p1"
xmlns:ct="http://www.xxx.com/xmlns/osb/WS2CICS/common"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--xs:element name="Param" type="ParamType"/-->
<xs:complexType name="ParamType">
<xs:sequence>
<xs:element name="Text" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
我的XML:
<Param xsi:type="p1:ParamType"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.xxx.com/xmlns/osb/WS2CICS/Envelope/v01"
xmlns:p1="http://www.xxx.com/xmlns/osb/WS2CICS/program/PROG1/p1">
<p1:Text>abc</p1:Text>
</Param>
我基本上是用從this site代碼使用XmlBeans的XML驗證。但驗證失敗,消息"Invalid type"
對元素「參數」。只有通過在XSD中取消註釋「Param」元素聲明並在XML中添加名稱空間前綴p1:
來更改XML中的「Param」的名稱空間之後,驗證才能成功 - 即在對元素聲明進行驗證時,不是對類型聲明。
我需要的是:
- 使用XMLBeans
- 莫名其妙地告訴它XmlBeans的是,在XML根元素
"{http://www.xxx.com/xmlns/osb/WS2CICS/Envelope/v01}Param"
是OK(不需要檢查)。 - 告訴XmlBeans的根是複雜類型
"{http://www.xxx.com/xmlns/osb/WS2CICS/program/PROG1/p1}ParamType"
的(檢查兒童)
我該怎麼做呢?
背景:
我有一個郵件信封裏的「參數」元件的類型是「anyType的」,即,它可以具有任何內容。在特定情況下,我需要檢查「Param」是否具有由動態選擇的XSD提供的特定內容。我可以很容易地檢查信封的有效性,但在第二步中,我需要檢查Param的有效性。
編輯:重新表述
通過實驗我找到了同樣的解決方案 - 除了在代碼中動態內聯生成元素「Param」的模式外。但是,不知何故,我希望會有更好的解決方案 - 這樣XmlBeans將只驗證「Param」元素的內容,而不是元素本身,這將刪除「Param」元素的模式必要性。 loader.parse(...)方法有一個SchemaType作爲第二個參數。但是我沒有成功地使它工作。也許這將是方式? – xarx
基本上,您要求驗證xml的某些部分,但不包括其他部分。我不確定你是否可以做到這一點。 – IndoKnight
關於我原來問題中的「背景」評論,你會如何解決這個問題?你會使用你在答案中建議的解決方案嗎? – xarx