如果conditon
,我如何显示相同级别的元素值例如
XML
<catalog>
<cd>
<title>Empire Burlesque</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>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
XSLT
<xsl:if test="/catalog/cd/country='UK'">
<xsl:value-of select="title"/>
<xsl:value-of select="artist"/>
</xsl:if>
这不会影响英国级元素的标题和艺术家
我知道解决问题的一种方法是使用每个循环,但我正在寻找一种有效的方法
答案 0 :(得分:3)
此:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/catalog/cd">
<xsl:if test="country = 'UK'">
<xsl:value-of select="title"/>
<xsl:value-of select="artist"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
产地:
<?xml version="1.0" encoding="UTF-8"?>
Hide your heartBonnie Tyler
答案 1 :(得分:3)
这可以仅使用模板完成:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/catalog/cd[country='UK']" priority="1">
<xsl:value-of select="title"/>
<xsl:value-of select="artist"/>
</xsl:template>
<xsl:template match="/catalog/cd">
<!-- handle non-UK CDs here -->
</xsl:template>
</xsl:stylesheet>
还有许多其他方法 - 当然,根据您的要求 - 安排模板以生成所需的输出。例如,您最终可能会使用显式模板来处理title
和artist
元素(或明确隐藏每个cd
的所有其他子元素)。
所有这些都取决于您的特定需求,但我想在此处展示的一般观点是,当您在模板匹配中正确捕获目标元素时,您将获得更多功能(并最终获得更清晰的代码) (而不是 ad-hoc 条件)。