我的源文件如下所示:
<stuff>
<s>
<contents>
<code>503886</code>
<code>602806</code>
</contents>
...
</s>
<p>
<code>344196</code>
<export>true</export>
...
</p>
<!-- more 's' and 'p' tags -->
...
</stuff>
我需要迭代's'并选择那些 - 其中'contents'标签内部的'code'属于'p',其中export = true。
过去几个小时我一直试图解决这个问题。 请分享一些想法。
答案 0 :(得分:1)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="kSByCode" match="s" use="contents/code"/>
<xsl:template match="text()"/>
<xsl:template match="p[export='true']">
<xsl:copy-of select="key('kSByCode',code)"/>
</xsl:template>
</xsl:stylesheet>
使用此输入:
<stuff>
<s>
<contents>
<code>503886</code>
<code>602806</code>
</contents>
</s>
<p>
<code>602806</code>
<export>true</export>
</p>
</stuff>
输出:
<s>
<contents>
<code>503886</code>
<code>602806</code>
</contents>
</s>
注意:每当有交叉引用时,请使用密钥。
修改:错过迭代s
部分。谢谢,迪米特!
编辑2 :重新阅读此答案我发现它可能令人困惑。因此,对于表达式选择节点,请使用:
key('kSByCode',/stuff/p[export='true']/code)
答案 1 :(得分:0)
我需要迭代's'并选择 那些 - 在'内容'标签内 有'代码'属于'p' 具有export = true。
使用强>:
<xsl:apply-templates select=
"/*/s
[code
=
/*/p
[export='true']
/code]"/>