在最后一次出现XSLT的特定元素之后,如何将一个XML数据复制到另一个数据中



我有两个XML文件。我想将一个XML文件数据复制到另一个元素的最后出现下。以下是我有的XML:

---------- xml-1---------------
<?xml version="1.0"?>
<parent>
....
<form id="1" name="world"/>
 <source id="1" name="abc1"/>
 <source id="2" name="abc2"/>
 <source id="3" name="abc3"/>
 <file id="1" name="xyz"/>
....
</parent> 
----------- xml-2--------------
<?xml version="1.0"?>
<root>
<source id="4" data="anything"/>
<source id="5" data="anything"/>
<source id="6" data="anything"/>
<source id="7" data="anything"/>
</root>

------------------The desired output I want-----------------
<?xml version="1.0"?>
<parent>
....
<source id="1" name="abc1"/>
<source id="2" name="abc2"/>
<source id="3" name="abc3"/>
<source id="4" data="anything"/>
<source id="5" data="anything"/>
<source id="6" data="anything"/>
<source id="7" data="anything"/>
<file id="1" name="xyz"
....
</parent> 

============== xslt I am using =============
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*" name="identity">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="source">
    <xsl:choose>
      <xsl:when test="'id=3'">
          <xsl:call-template name="identity"/>
          <xsl:copy-of select="document('file:///D:/Softwares/JEE    eclipse/JEEworkspace/Migration/TestMigrationWithoutDeletingProject/xml2.xml')/*/*"/>
      </xsl:when>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

我试图根据ID属性找到它,但是它是在XML-1数据的每个源元素之后复制XML-2数据。请帮助我。

我认为您的代码中有两个小问题:

  • <xsl:call-template name="identity"/>的呼叫应在您的choose部分外部(或之前)。顺便说一句:由于您没有otherwise部分,在这里使用xsl:if会稍短。
  • 正确插入点的测试应为 test="@id = 3",因为术语"'id=3'"只是一个始终产生true()的字符串。

相关内容

  • 没有找到相关文章

最新更新