我想从所有标签中选择某个属性的值,其中另一个属性与条件匹配。
例如,如果我的XML文档是:
<?xml version="1.0"?>
<doc>
<mytag txt="alpha" foo="a"></mytag>
<mytag txt="beta" foo="b"></mytag>
</doc>
我想使用这样的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="/">
<xsl:for-each select="doc/mytag">
|<xsl:value-of select="@txt[@foo='a']"/>|
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
获得这样的输出:
|alpha|
相反,没有选择任何内容。
如果我用[xsl:if test =&#34; @foo =&#39; a&#39;&#34;]标记包装[xsl:value-of]标记,它将起作用:< / p>
...
<xsl:for-each select="doc/mytag">
<xsl:if test="@foo='a'">
|<xsl:value-of select="@txt"/>|
</xsl:if>
</xsl:for-each>
但我想尽可能避免这种情况,只是为了节省空间,因为我有20个单独的标签,我想提取。
我猜这是一个xpath问题,但经过相当漫长的搜索,我还没有找到解决方案。任何帮助表示赞赏。
答案 0 :(得分:0)
您正在寻找的语法是......
|<xsl:value-of select="@txt[../@foo='a']"/>|
但是,在||
不等于@foo
的情况下,这将会遗漏a
。所以,你可以做的更多是xsl:for-each
而不是
<xsl:for-each select="doc/mytag[@foo='a']">
|<xsl:value-of select="@txt"/>|
</xsl:for-each>