我是XSLT的新手。所以我试图做一个应该输出元素值的例子。输出格式为纯文本格式。 这是名为cdcatalog.xml的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="catalog.xsl"?>
<catalog>
<cd>
<title>Empire</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>
<europe_country>Bulgaria</europe_country>
<azia_coutry>China</azia_coutry>
</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
</catalog>
这是名为cdcatalog.xsl
的XSL文件<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="cd">
<xsl:value-of select="title"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我期望的输出是这样的
Empire
Hide your heart
但输出窗口中没有任何内容。 我哪里错了? 提前谢谢。
答案 0 :(得分:2)
<xsl:for-each select="catalog/cd">
来遍历cd
内的catalog
元素。请记住the "root" of your document isn't the <catalog>
element。cdcatalog.xsl
,但xml中的href
为catalog.xsl
。答案 1 :(得分:1)
编写模板时,请尝试直接定位(即匹配)您感兴趣的内容(在这种情况下为title
元素)。
XSLT样式表
如您所见,还有第二个与text()
匹配的模板。如果省略它,则输出输入文档中的所有文本内容,因为这是文本节点的XSLT处理器的默认行为。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="title">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="text()"/>
</xsl:transform>
文字输出
Empire
Hide your heart
在线试用此解决方案here。
顺便说一下,确保您的元素始终命名。名为azia_coutry
的元素与asia_coutry
或asia_country
完全不同。