【发布时间】:2011-11-22 20:22:16
【问题描述】:
提供的示例是我正在尝试做的简化版本。
使用 XSLT,我如何比较来自不同(非子)xpath 中节点的数据?我想将每个cd/artist 与dvd/director 进行比较,看看它们是否匹配(参见下面的示例)。有多个 cd 和 dvd,但在这个简化的示例中,我只使用了一个。我尝试在一个模板中进行比较,但我无法访问 dvd xpath。而且我无法使用单独的模板访问 dvd xpath。使用单独的模板时,我创建了一个我称之为 (<xsl:call-template name="compare">) 的“比较”模板。通过访问,我的意思是我无法打印出 dvd/director 的值。
我的问题:访问不同的 xpath 时如何访问一个 xpath?我想做的是比较 cd 艺术家和 dvd 导演,看看它们是否匹配。并打印出这些值,如果它们匹配。我想不通的是如何找到艺术家和导演,以便我可以比较他们。我的 xslt 确实打印了 cd 的艺术家值,但我无法打印出 dvd/director 的值。
我的示例如下:
样本来自 W3Schools。我修改了它们以说明我的问题。
XSLT 示例
<xsl:for-each select="catalog/cd">
<xsl:value-of select="@artist"/>
<xsl:for-each select="catalog/dvd">
<xsl:if test="@director = @artist">
<xsl:value-of select="@director"/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
示例 XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd title="Unchain my heart" artist="Joe Cocker">
<country>USA</country>
<company>EMI</company>
<price>8.20</price>
<year>1987</year>
</cd>
<dvd title="My DVD Movie" director="Joe Cocker">
<country>USA</country>
<company>WB</company>
<price>20.00</price>
<year>1999</year>
</dvd>
</catalog>
提前感谢您的帮助。
【问题讨论】:
-
这段代码非常错误:任何地方都没有名为
director或artist的属性。