【发布时间】:2015-03-26 08:47:20
【问题描述】:
我有几个要合并的文件,忽略空元素。
例如: 文件 1:
<ds>
<sk>
<f1>1</f1>
<f2>2</f2>
</sk>
<sk>
<f1>3</f1>
<f2>4</f2>
</sk>
</ds>
文件 2:
<ds>
<ac>
<g1>9</f1>
<g2>10</f2>
</ac>
<ac>
<g1>11</f1>
<g2>12</f2>
</ac>
</ds>
和文件 3:
<ds>
<rs>
<k1>A</f1>
<k2>B</f2>
<k3></k3>
</rs>
<rs>
<k1>C</f1>
<k2>B</f2>
<k3/>
</rs>
</ds>
我想作为输出:
<ds>
<sk>
<f1>1</f1>
<f2>2</f2>
</sk>
<sk>
<f1>3</f1>
<f2>4</f2>
</sk>
<ac>
<g1>9</f1>
<g2>10</f2>
</ac>
<ac>
<g1>11</f1>
<g2>12</f2>
</ac>
<rs>
<k1>A</f1>
<k2>B</f2>
</rs>
<rs>
<k1>C</f1>
<k2>B</f2>
</rs>
</ds>
我已经用 xslt 试过了:
<?xml version="1.0" ?>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xml:space="preserve"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/ds">
<xsl:copy-of select="document('File1')/ds/sk"/>
<xsl:copy-of select="document('File2')/ds/ac"/>
<xsl:copy-of select="document('File3')/ds/rs"/>
</xsl:template>
</xsl:transform>
输入是 File1。文件已合并,但我不知道如何删除 File3 之类的空元素。 有什么想法吗?
【问题讨论】:
-
欢迎来到 SO。不幸的是,我无法真正看到您在做什么:您的 xslt 不完整,
xsl:for-each没有正文,也没有关闭。我假设你的代码正在做你所说的“合并”? -
有一个错误,不是for-each而是copy-of。
-
谢谢,但您仍应关闭它们以获取合法的 XML。 (复制和粘贴经过测试的代码通常是个好主意。)