2015-11-27 83 views
1

我使用xsd來驗證可能有幾個未知xml元素的xml文件。 我知道xsd支持處理未知xml元素的「any」元素。問題是我必須驗證這些未知元素的屬性,並且我一直無法找到這樣做的方法。使用xsd驗證未知元素的xml屬性

的Xml虛設例如:

<root> 
    <aaaaaa gui-name="my name" group="my group" chart="my chart" /> 
    <nnnnnn gui-name="my name" group="my group" chart="my chart" /> 
    <yyyyyy gui-name="my name" group="my group" chart="my chart" /> 
    ... 
    ... 
</root> 

的XML元素是未知的,但它們的屬性是衆所周知的。 如何驗證這些未知元素的屬性?

在此先感謝。

+0

你是說'aaaaaaa','nnnnnn'和'yyyyyy'可以是任何東西嗎?你可以訪問所有的孩子並迭代,然後檢查屬性,而不是試圖通過名字訪問孩子?它很難提供建議,而不看到你現在正在做什麼 – pwilmot

+0

這些只是簡單的虛擬例子,但是,它們可以是任何東西。這裏的要點是那些元素必須具有相同的屬性,並且我必須驗證這些屬性是否存在以及它們是否具有有效值。現在我根本不驗證這些屬性。我只是使用接受所有元素的「any」xsd元素 – Tharos

回答

0

嘗試使用<any>元素類型。

看到http://www.w3schools.com/Xml/schema_complex_any.asp

<xs:element name="root"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:any type='dummyType' /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="dummyType"> 
    <xs:attribute name='gui-name' type='xs:string'/> 
    <xs:attribute name='group' type='xs:string'/> 
    <xs:attribute name='chart' type='xs:string'/> 

</xs:complexType> 
+0

感謝您的建議,但「any」元素中不允許使用「type」屬性。 – Tharos

0

也許你需要使用SubstitutionGroups實現繼承。在接下來的環節

http://www.ibm.com/developerworks/library/x-xtendschema/

+0

謝謝,當我們知道可能出現在XML中的元素時,您的建議似乎很有用。在我的情況下,我不知道哪些元素將出現在XML中。我只知道這些元素允許的屬性。 – Tharos

0

看一段「抽象元素和替換組」你會好起來的改變的XML格式。將標籤名稱移動到一個屬性中,併爲所有標籤使用相同的名稱。 每個標籤上的xsi:type屬性可能能夠識別包含屬性的複雜類型的名稱。你看過那種可能性嗎?

+0

謝謝,我沒有自己的XML,因此改變它的格式是不可能的。 – Tharos

+0

夠公平的。 XML Schema有兩種識別類型的方法。它使用標籤名稱來標識類型(或類型族)和/或它使用xsi:type屬性。在你的情況下,既不能使用任何技術,也不能用XSD描述這種XML格式。 – kimbert