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