2
我認爲這應該很容易找到,但經過一番搜索之後,我發現這可能很好地定義清楚。使用XSL顯示屬性使用XSD定義的默認值
在我的XSD中,我定義了一個從字符串派生的枚舉。在一個複雜的類型中,我定義了一個引用這個枚舉的屬性,並使用默認值。
在我的XSL中,我希望爲其屬性未明確設置的元素顯示此屬性的默認值。
的XSD:
<xs:complexType name="foo">
<xs:attribute name="bar" type="responsecodes:barType" default="default"/>
</xs:complexType>
<xs:simpleType name="barType">
<xs:restriction base="xs:string">
<xs:enumeration value="default">
<xs:annotation>
<xs:documentation xml:lang="en-us">Default bar.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="chocolate">
<xs:annotation>
<xs:documentation xml:lang="en-us">A chocolate ...bar</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
的XML:
....
<foo/>
<foo bar="default"/>
<foo bar="chocolate"/>
....
我期望的XSL是:(或多或少)
<ol>
<xsl:for-each select="/foo">
<li>BarType: '<xsl:value-of select="@bar" />'</li>
</xsl:for-each>
</ol>
現在,當我顯示此樣式XML文件中,'bar'屬性的值對於非指定值是空的,而我希望顯示(或選擇)默認值。
現在:
- 棒型: ''
- 棒型: '默認'
- 棒型: '巧克力'
期望:
- 棒型:「默認'
- 棒型: '默認'
- 棒型: '巧克力'
現在,這應該是很簡單的,不是嗎?
感謝您的答覆。對於在XSD級別很容易定義的值來說,看起來有點像'工作'。我理解非價值不被顯示的原因,但我真的期望更簡單的方法回到默認值。 (類似於xsl:value-of-or-default) 正如您可能已經猜到的那樣,我對XSL相當陌生,但幾乎沒有發現表面。 – 2009-12-08 12:32:50
XSLT與您可能認爲的XML Schema不太一樣。它是一種XML轉換語言,它可以將Schema看作另一個XML文檔。這是我在這裏做的。 XSLT並不關心你的XML是否對模式有效,它只需要格式良好。沒有'xsl:value-of-or-default'。 – Tomalak 2009-12-08 13:37:33
我瞭解您提供的方法。 我只是猜測,因爲XSL'通過XPath選擇'找到'屬性值,並且這需要正確的名稱空間映射,它將更加意識到XSD所強加的定義和限制。 您是否同意我的看法,這不是一個奇怪的問題? – 2009-12-08 17:11:34