如果值存在于另一个XML列表中,则筛选XML记录
我有两个XML主XML和列表XML。我试图根据两个XML上是否存在相同的节点值来过滤主XML 尝试了以下xslt,但未按预期工作 Xslt 我正在使用Cast Iron工具执行此过滤器,它支持XSLT 2.0 主xml:如果值存在于另一个XML列表中,则筛选XML记录,xml,xslt,xslt-2.0,cast-iron,Xml,Xslt,Xslt 2.0,Cast Iron,我有两个XML主XML和列表XML。我试图根据两个XML上是否存在相同的节点值来过滤主XML 尝试了以下xslt,但未按预期工作 Xslt 我正在使用Cast Iron工具执行此过滤器,它支持XSLT 2.0 主xml: <lines> <line> <account> <seg1>0101 Expense</seg1> </account> </line>
<lines>
<line>
<account>
<seg1>0101 Expense</seg1>
</account>
</line>
<line>
<account>
<seg1>0102 Capital</seg1>
</account>
</line>
<line>
<account>
<seg1>0103 Expense</seg1>
</account>
</line>
<line>
<account>
<seg1>0104 Expense</seg1>
</account>
</line>
<line>
<account>
<seg1>0105 Espense</seg1>
</account>
</line>
</lines>
列表Xml:
<rows>
<row>
<cc>0101</cc>
</row>
<row>
<cc>0103</cc>
</row>
<row>
<cc>0105</cc>
</row>
<row>
<cc>0107</cc>
</row>
<row>
<cc>0109</cc>
</row>
</rows>
输出Xml:
<lines>
<line>
<account>
<seg1>0101</seg1>
</account>
</line>
<line>
<account>
<seg1>0103</seg1>
</account>
</line>
<line>
<account>
<seg1>0105</seg1>
</account>
</line>
</lines>
EDIT1:添加了xslt,我正在尝试输入包含更多信息的XML。声明一个密钥,然后使用标识转换模板和一个空模板
<xsl:template match="line[not(key('ref', account/seg1, doc('list.xml')))]"/>
在编辑之后,您实质性地更改了输入结构,我认为如果您将空模板更改为
<xsl:template match="line[not(key('ref', substring-before(account/seg1, ' '), doc('list.xml')))]"/>
已尝试,无法使其工作,请检查问题并进行一些相关编辑。@sandeepkairamkonda,我已尝试将我的建议改编为您编辑的输入数据。至于您现在在编辑中显示的XSLT,如果您没有显示任何包含名为invoice headers的元素的输入示例,我不知道为什么要编写模板match=/invoice headers。很抱歉,我复制了不同的xslt,实际的输入是非常复杂的数据,我在这里使用了更简单的xml。
<xsl:template match="line[not(key('ref', substring-before(account/seg1, ' '), doc('list.xml')))]"/>