您可以在随附的XSD文档中为XML文档中的元素或属性定义默认值。下面我将介绍XSD,XML和XSLT文档以及输出中的相关部分。
XSD:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="testelement" maxOccurs="unbounded" default="666">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="testattribute" type="xs:string" default="xxx" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
XML:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xsd3.xsd">
<testelement testattribute="aaa">1234</testelement>
<testelement testattribute="bbb">2345</testelement>
<testelement testattribute="ccc" />
<testelement>4567</testelement>
<testelement testattribute="eee">5678</testelement>
</root>
XSLT:
<xsl:template match="root">
...
<body>
<xsl:for-each select="testelement">
<xsl:value-of select="@testattribute" />
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<br />
</xsl:for-each>
</body>
输出:
aaa : 1234
bbb : 2345
ccc :
: 4567
eee : 5678
这不是我的预期。我希望在第三行看到'ccc:666',在第四行看到'xxx:4567'。指定默认值很容易,但是很难显示这个answer中提到的默认值吗?我认为值得再次提问,因为答案超过4年,而且指定默认值要困难得多。
答案 0 :(得分:0)
将以下XSL与XML和XSD一起使用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="html" indent="yes"/>
<xsl:template match="root">
<html>
<body>
<xsl:for-each select="testelement">
<xsl:variable name="key">
<xsl:choose>
<xsl:when test="@testattribute">
<xsl:value-of select="@testattribute"/>
</xsl:when>
<xsl:otherwise>
<!-- Read default value from Schema -->
<xsl:value-of select="document('xsd3.xsd')/xs:schema/xs:element[@name='root']/xs:complexType/xs:sequence/xs:element[@name='testelement']/xs:complexType/xs:simpleContent/xs:extension/xs:attribute[@name='testattribute']/@default"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="text()">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<!-- Read default value from Schema -->
<xsl:value-of select="document('xsd3.xsd')/xs:schema/xs:element[@name='root']/xs:complexType/xs:sequence/xs:element[@name='testelement']/@default"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$key" />
<xsl:text> : </xsl:text>
<xsl:value-of select="$value" />
<br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出:
aaa : 1234
bbb : 2345
ccc : 666
xxx : 4567
eee : 5678