2012-10-17 75 views
0

我正在基於應用程序中的某些條件創建一個xml文檔。我的xml中的元素數量總是可變的。 例如,有一次它可能看起來像:來自可變數量XML元素的XSD

<TransactionTypes> 
    <X value="false" text="" /> 
    <O value="false" text="" /> 
    <E value="false" text="" /> 
    <P value="false" text="" /> 
    <C value="false" text="" /> 
    <K value="false" text="" /> 
</TransactionTypes> 

和其他的時間,如:

<TransactionTypes> 
    <TT value="false" text="" /> 
    <EP value="false" text="" /> 
    <PY value="false" text="" /> 
</TransactionTypes> 

所以TransactionTypes內的子元素總是在元素的名稱方面有所不同,但他們總是有價值和文字屬性。 如何爲此製作XSD?

回答

0

我不認爲你可以在通配符上構建XSD限制,然後指定通配符元素的屬性。

唯一可能的標籤可能是「任何」: http://www.w3schools.com/schema/schema_complex_any.asp

什麼屬性「任何」可能不能被定義。 我不認爲有另一種解決方案。 正如你所說的「可以有任何種類的元素」...... 如果你可以定義所有可能的元素是「TransactionTypes」的子元素,你一定會做得更好。無論有多少。您可以將所有這些子元素映射到同一個complexType並定義屬性值/文本,然後只剩下一次。 但是通配符不起作用。

塞巴斯蒂安

0

在XSD 1.1,你可以定義TransactionTypes元素上斷言:

<xs:assertion test="every $c in * satisfies @value='false' and @text=''"/> 

然而,值得指出的是,XSD的目的不是讓你表達你的XML的任意約束,而是描述你在XSD設計者認爲是精心設計的XML中發現的那種約束;而這個XML似乎並不屬於這個範疇。