XML就是这样的:
<dict>
<key>2</key>
<array>
<string>A</string>
<string>B</string>
</array>
<key>3</key>
<array>
<string>C</string>
<string>D</string>
<string>E</string>
</array>
</dict>
XML Two就是这样的:
<dict>
<key>A</key>
<array>
<string>A1</string>
<false/>
<false/>
<array>
<string>Apple</string>
<string>This is an apple</string>
</array>
<array>
<string>Apple Pie</string>
<string>I love Apple Pie.</string>
</array>
</array>
<key>B</key>
<array>
<string>B7</string>
<false/>
<false/>
<array>
<string>Boy</string>
<string>I am a boy.</string>
</array>
</array>
</dict>
我想转换成这个:
<dict>
<key>2</key>
<array>
<string>A, Apple, Apple Pie</string>
<string>B, Boy</string>
</array>
...
</dict>
答案 0 :(得分:1)
您可以通过在第一个XML文件上应用以下样式表来使用XSLT来做到这一点,假设第二个XML文件名为two.xml
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="string-by-key"
match="/dict/array/array/string[1]"
use="preceding::key[1]"/>
<xsl:template match="dict">
<dict>
<xsl:apply-templates select="key"/>
</dict>
</xsl:template>
<xsl:template match="key">
<key>
<xsl:value-of select="."/>
</key>
<array>
<xsl:apply-templates select="following-sibling::array[1]/string"/>
</array>
</xsl:template>
<xsl:template match="string">
<string>
<xsl:variable name="key" select="."/>
<xsl:value-of select="$key"/>
<xsl:for-each select="document('two.xml')">
<xsl:for-each select="key('string-by-key', $key)">
<xsl:text>, </xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
</string>
</xsl:template>
</xsl:stylesheet>
这里的关键技巧(没有双关语意)是
xsl:key
来索引
字符串按键可以轻松实现
和快速查找,xsl:for-each
key
功能。 编辑。由于您专门询问了Linux,您可以使用xsltproc
程序将XSLT样式表应用到输入文件中,如下所示:
xsltproc stylesheet.xsl one.xml
答案 1 :(得分:0)
安装Java并使用XmlMerge。
您可能还会发现XML Merger有用。