我有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
传递此查询的XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="catalog/cd"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我已经写了上面的xslt代码,它选择所有子标记的所有值。上述代码的答案是:
帝国滑稽鲍勃·迪伦美国哥伦比亚10.90 1985
问题:我想选择除一个子标签外的所有子标签,假设我不想要子标签"价格"中的值。即,我期待以下答案
帝国滑稽鲍勃·迪伦美国哥伦比亚1985
这个答案的"xslt 1.0"代码是什么?
首先,您应该知道现有XSLT的实际输出是:
<html>
<body>
Empire Burlesque
Bob Dylan
USA
Columbia
10.90
1985
</body>
</html>
您展示的是浏览器如何将渲染到屏幕上(将所有空白字符序列折叠到一个空格中)。
要从结果中排除价格,您必须使样式表更深入一层,并提供自己的分隔符。
替换:
<xsl:value-of select="catalog/cd"/>
带有:
<xsl:for-each select="catalog/cd/*[not(self::price)]">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
这里的结果是:
<html>
<body>Empire Burlesque Bob Dylan USA Columbia 1985 </body>
</html>
浏览器将其渲染为:
Empire Burlesque Bob Dylan USA Columbia 1985