1

我有几个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>

文件: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>

文件: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>

到目前为止,我已经能够通过创建一个列出我要合并的文件 (merge.xml) 的 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。

4

1 回答 1

0

Use

<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>
于 2013-09-13T15:44:19.587 回答