首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个xml文件(在第二个文件中添加到第一个文件唯一元素)

合并两个xml文件(在第二个文件中添加到第一个文件唯一元素)
EN

Stack Overflow用户
提问于 2015-01-08 16:31:01
回答 1查看 242关注 0票数 0

我有包含元素列表的xml文件,每个元素包含许多子元素,其中一个SHA1包含唯一的内容。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<container>
    <sharedLibrary>
        <SF>
            <FID>One</FID>
            <SHA1>X6PZOW4DLFDUEQU3SW5VPK7MTIF62T2A</SHA1>
        </SF>
        <SF>
            <FID>Two</FID>
            <SHA1>RNKTROE47ZOGJ52Y6QMXPZJPZ56HSXCM</SHA1>
        </SF>
        <SF>
            <FID>And so on</FID>
            <SHA1>4MA633OCAHQC752T5D35LP5TUHQQR3WP</SHA1>
        </SF>
    </sharedLibrary>
</container>

第二个xml文件类似,但结构不同(唯一的元素sha1)。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<containerone>
    <containertwo>
        <shared-file>
            <sha1>X6PZOW4DLFDUEQU3SW5VPK7MTIF62T2A</sha1>
            <file-size>4563154</file-size>
        </shared-file>
        <shared-file>
            <sha1>4MA633OCAHQC752T5D35LP5TUHQQR3WP</sha1>
            <file-size>5267456</file-size>
        </shared-file>
    </containertwo>
</containerone>

结果文件首先更新包含新的SIZE元素的xml文件。如果唯一元素内容相等,则应该包含来自file-size元素的内容。如果没有,则必须包含文本not known。见预期结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<container>
    <sharedLibrary>
        <SF>
            <FID>One</FID>
            <SHA1>X6PZOW4DLFDUEQU3SW5VPK7MTIF62T2A</SHA1>
            <SIZE>4563154</SIZE>
        </SF>
        <SF>
            <FID>Two</FID>
            <SHA1>RNKTROE47ZOGJ52Y6QMXPZJPZ56HSXCM</SHA1>
            <SIZE>not known</SIZE>
        </SF>
        <SF>
            <FID>And so on</FID>
            <SHA1>4MA633OCAHQC752T5D35LP5TUHQQR3WP</SHA1>
            <SIZE>5267456</SIZE>
        </SF>
    </sharedLibrary>
</container>

XSL样式表更倾向于使用其他可以这样做的工具。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 16:38:03

假设XSLT2.0

代码语言:javascript
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="doc2-url" select="'second-file.xml'"/>
<xsl:variable name="doc2" select="document($doc2-url)"/>

<xsl:key name="by-sha1" match="containertwo/shared-file" use="sha1"/>

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="SF">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
    <SIZE><xsl:value-of select="(key('by-sha1', SHA1, $doc2)/file-size, 'not known')[1]"/></SIZE>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27844980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档