根据匹配值移动节点

时间:2016-04-12 13:45:03

标签: xslt xslt-1.0

我有以下输入xml:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
   <PQContact>
      <input>
         <folder>
            <UNITCD>CS2XAA</UNITCD>
            <FOLDERID>KKMTEST3000</FOLDERID>
         </folder>
      </input>
      <input>
         <folder>
            <UNITCD>CS2XAA</UNITCD>
            <FOLDERID>KKMTEST1300</FOLDERID>
         </folder>
      </input>
   </PQContact>
   <AWD>
      <case>
         <RMEM>KKMTEST3000</RMEM>
         <transaction>ABC</transaction>
      </case>
      <case>
         <RMEM>KKMTEST1300</RMEM>
         <transaction>DEF</transaction>
      </case>
   </AWD>
</ROOT>

如果/ROOT/AWD<folder>标记的值与{{{{}}的值相匹配,我必须将/ROOT/PQContact/input下的案例移至<RMEM> <case> {}}}下的1}}标记。

我的结果xml应如下所示:

<FOLDERID>

1 个答案:

答案 0 :(得分:1)

考虑使用DELETE查找xsl:key元素:

case

然后,您可以拥有一个与复制现有节点的<xsl:key name="case" match="case" use="RMEM" /> 元素匹配的模板,但也可以使用该键复制匹配的folder元素。

case

将此与XSLT identity template相结合,然后唯一需要的是确保<xsl:template match="folder"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> <xsl:apply-templates select="key('case', FOLDERID)" /> </xsl:copy> </xsl:template> 不会被复制的模板。

试试这个XSLT

AWD