Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果值存在于另一个XML列表中,则筛选XML记录_Xml_Xslt_Xslt 2.0_Cast Iron - Fatal编程技术网

如果值存在于另一个XML列表中,则筛选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>

我有两个XML主XML和列表XML。我试图根据两个XML上是否存在相同的节点值来过滤主XML

尝试了以下xslt,但未按预期工作

Xslt

我正在使用Cast Iron工具执行此过滤器,它支持XSLT 2.0

主xml:

<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')))]"/>