合并多个xml文件并一次插入元素以使用xslt输出更新的xml

时间:2013-09-13 15:29:48

标签: xslt xslt-1.0

我有几个xml文件如下:

文件:1.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <config>
       <info>
           <info1>val1</info1>
           <info2>val2</info2>
       </info>
       <info>
           <info1>val3</info1>
           <info2>val4</info2>
       </info>
   </config>

file:2.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <config>
       <info>
           <info1>val5</info1>
           <info2>val6</info2>
       </info>
       <info>
           <info1>val7</info1>
           <info2>val8</info2>
       </info>
   </config>

file:3.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <config>
       <info>
           <info1>val9</info1>
           <info2>val10</info2>
       </info>
       <info>
           <info1>val11</info1>
           <info2>val12</info2>
       </info>
   </config>

我想合并它们并添加到每个节点:

<info3>XXX</info3>

输出应如下所示:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <config>
       <info>
           <info1>val1</info1>
           <info2>val2</info2>
           <info3>XXX</info3>
       </info>
       <info>
           <info1>val3</info1>
           <info2>val4</info2>
           <info3>XXX</info3>
       </info>
       <info>
           <info1>val5</info1>
           <info2>val6</info2>
           <info3>XXX</info3>
       </info>
       <info>
           <info1>val7</info1>
           <info2>val8</info2>
           <info3>XXX</info3>
       </info>
       <info>
           <info1>val9</info1>
           <info2>val10</info2>
           <info3>XXX</info3>
       </info>
       <info>
           <info1>val11</info1>
           <info2>val12</info2>
           <info3>XXX</info3>
       </info>
   </config>

到目前为止,我已经能够通过创建一个列出我要合并的文件的xml文件来合并该文件(merge.xml):

<mergeData newRoot="config">
   <filelist>
       <fileItem>1.xml</fileItem>
       <fileItem>2.xml</fileItem>
       <fileItem>3.xml</fileItem>
   </filelist>
</mergeData>

使用以下xsl(merge.xsl):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
       <xsl:element name="{mergeData/@newRoot}">
           <xsl:apply-templates select="mergeData/fileList/fileItem"/>
       </xsl:element>
  </xsl:template>
  <xsl:template match="fileItem">   
       <xsl:copy-of select="document(.)/config/*"/>
  </xsl:template>
</xsl:stylesheet>

但是我应该如何修改xsl以同时在每个信息中添加“info3”。 “info3”始终是每个节点的相同信息。

有人可以帮忙吗?

注意:下一个问题是如何使用位于特定文件夹中的xml文件生成merge.xml。

1 个答案:

答案 0 :(得分:0)

使用

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:param  name="new">
    <info3>XXX</info3>
  </xsl:param>

  <xsl:template match="/">
       <xsl:element name="{mergeData/@newRoot}">
           <xsl:apply-templates select="document(mergeData/fileList/fileItem)/config/*"/>
       </xsl:element>
  </xsl:template>

  <xsl:template match="config/*">   
       <xsl:copy>
         <xsl:copy-of select="node()"/>
         <xsl:copy-of select="$new"/>
       </xsl:copy>
  </xsl:template>

</xsl:stylesheet>