我需要指定一個用於驗證XML文檔的XSD。 XSD將用於JAXB生成的Java綁定。 我的問題是指定可選元素,我不知道名稱和我通常不感興趣解析。創建使用<all>和<any>元素打開的有效XSD
XML文檔的結構是這樣的:
<TRADE>
<TIME>12:12</TIME>
<MJELLO>12345</MJELLO>
<OPTIONAL>12:12</OPTIONAL>
<DATE>25-10-2011</DATE>
<HELLO>hello should be ignored</HELLO>
</TRADE>
重要的是,認爲:
- 我不能假設任何順序,接下來的XML文檔實例migtht有吊牌以不同的順序
- 我只想解析一些標籤,有些是必需的,有些是可選的
- XML文檔NTS可以與我沒有興趣在解析
新的元素來擴展我的XSD的結構是這樣(不是有效的XSD):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- *********************************************** -->
<!-- Trade element definitions for the XML Documents -->
<!-- *********************************************** -->
<xs:complexType name="Trade">
<!-- Using the all construction ensures that the order does not matter -->
<xs:all>
<xs:element name="DATE" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="TIME" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="OPTIONAL" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:any minOccurs="0"/>
</xs:all>
</xs:complexType>
<!-- TRADE is the mandatory top-level tag -->
<xs:element name="TRADE" type="Trade"/>
</xs:schema>
所以,在這個例子中:DATE和TIME是強制性的(它們必須在XML中只有一次),OPTIONAL可能會出現一次,然後我想指定所有其他標記都是允許的。訂單無關緊要。
如何爲此指定有效的XSD?
我有一個suspecion,這是:-( 的情況下,額外的事情,我沒有寫,我好知道元素將出現最大一次 – 2011-03-03 12:44:18
我最終在解析步驟之前完成了一個XSLT步驟,這完美地工作,先對我不感興趣的所有標籤進行過濾,然後根據僅包含我感興趣的元素的「slim」xsd進行驗證 – 2011-03-04 09:37:06
如果我知道'無論'永遠不會是'日期'或'時間'嗎?那麼就不會有任何歧義 – 2017-09-15 16:01:42