如何将多个 xml 文件转换并合并为一个文件

2023-12-25

我希望您能帮助我使用 XSLT 将一些 XML 转换为新的 XML。我有选择多个 XML 并对它们应用 XSLT 的代码。

我的问题是 XSLT,我想将这些 shop1.xml shop2xml .. 转换为 allshops.xml。对于知道如何使用 XSLT 的人来说,这是一项简单的任务,因为只有 2-3 处更改。

您可以在下面找到更好理解的结构。非常感谢。

商店1.xml

<shop>
    <products>
        <product id="189">
            <title></title>
            <description></description>
            <price></price>
            <image></image>
            <url></url>
            <category id="61"></category>
        </product>
    </products>
</shop>

商店2.xml

<shop>
    <products>    
        <product id="182">
            <title></title>
            <description></description>
            <price></price>
            <image></image>
            <url></url>
            <category id="62"></category>
        </product>
    </products>
</shop>

商店3.xml//这个直接有产品,因为 root 和 id 可能已经存在

<products>
    <product>
        <id>123</id>
        <title></title>
        <description></description>
        <price></price>
        <image></image>
        <url></url>
        <category id="62"></category>
    </product>    
</products>

路径.xml从 php 代码中使用它来获取多个 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<files>
    <file>shop1.xml</file>
    <file>shop2.xml</file>
    <file>shop3.xml</file>
</files>

所有商店.xml

<products> //removed the store,shop and products stays as root
    <product>
        <id>the product's attribute id</id> //new element, with value the product id=""
        <title></title>
        <description></description>
        <price></price>
        <image></image>
        <url></url>
        <category></category> //removed the attribute id
        <shopid></shopid> //new element, will be blank for now
    </product>
    <product>
    </product>
    .
    .
    .
</products>

根据要求,这里是一个纯 XSLT 解决方案,它使用document()XSLT 1.0 功能。

Note:

  • 该变换的输入是paths.xml.
  • 该变换包括众所周知的身份转变 https://raw.github.com/gist/972175/b189899bb7701dde95a3cba04ced83356e738968/identity-transform.xsl.

[XSLT 1.0]

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:include href="identity.xsl"/>

    <xsl:template match="/*">
        <products>
            <xsl:for-each select="file">
                <xsl:apply-templates 
                    select="document(.)/*//product">
                    <xsl:with-param name="file" select="."/>
                </xsl:apply-templates>
            </xsl:for-each>
        </products>
    </xsl:template>

    <xsl:template match="product">
        <xsl:param name="file"/>
        <xsl:copy>

            <xsl:apply-templates select="@*"/>

            <xsl:if test="not(id)">
                <id><xsl:value-of select="@id"/></id>
            </xsl:if>

            <xsl:apply-templates select="node()"/>

            <shopid><xsl:value-of select="$file"/></shopid>

        </xsl:copy>
    </xsl:template>

    <xsl:template match="category/@id
        | product/@id"/>

</xsl:stylesheet>

当应用在paths.xml问题中提供的文件产生:

<products>
   <product>
      <id>189</id>
      <title/>
      <description/>
      <price/>
      <image/>
      <url/>
      <category/>
      <shopid>shop1.xml</shopid>
   </product>
   <product>
      <id>1418</id>
      <title/>
      <description/>
      <price/>
      <image/>
      <url/>
      <category/>
      <shopid>shop1.xml</shopid>
   </product>
   <product>
      <id>182</id>
      <title/>
      <description/>
      <price/>
      <image/>
      <url/>
      <category/>
      <shopid>shop2.xml</shopid>
   </product>
   <product>
      <id>118</id>
      <title/>
      <description/>
      <price/>
      <image/>
      <url/>
      <category/>
      <shopid>shop2.xml</shopid>
   </product>
</products>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将多个 xml 文件转换并合并为一个文件 的相关文章

随机推荐

  • 用于查询的 iTunes 搜索 API 页码

    有什么方法可以获取搜索查询下一页的结果吗 当我给出页面参数时 我从 iTunes 得到相同的结果 and 给出相同的输出 提供页面参数适用于客户评论 有什么办法可以得到下一页的结果吗 根据API文档 没有办法 但我发现了很多有用的答案 但A
  • “Uploader”必须是 FileUploader 的实例

    我提到了这个 https github com nervgh angular file upload tree version 3 0 0 alpha https github com nervgh angular file upload
  • 扩展方法调用不会编译,但对相同代码的静态方法调用会编译

    库 A 使用 C 扩展方法调用库 B 我从 C 编译器中收到一个奇怪的错误 类型 System Windows Forms Control 是在程序集中定义的 没有被引用 您必须添加对程序集的引用 System Windows Forms
  • 从 docker 容器内部和外部访问预先指定的 get URL 的 minio 对象

    我使用以下 docker compose yml 文件来部署 FastAPI MongoDB Minio docker 容器 version 3 7 services db image mongo latest container name
  • PostgreSQL 复制策略

    现在 我们使用 PostgreSQL 8 3 在 Linux 上 作为 Ruby on Rails Web 应用程序的数据库后端 考虑到在 PostgreSQL 数据库上我们积极使用行级阻塞和 PL PGSQL 我们可以使用什么来保护我们的
  • 无法通过 ssh 连接我的 ubuntu 服务器。 “kex_exchange_identification:横幅行包含无效字符”

    当我想使用VScode远程SSH连接我的服务器时 提示以下错误 kex exchange identification 横幅行包含无效字符 一开始我以为是我的VSCode的错误 但是我在PowerShell中尝试了最简单的SSH命令 它仍然
  • 指示服务器请求失败的最佳实践方法?

    我正在编写一个连接到服务的 API 该服务要么返回简单的 成功 消息 要么返回 100 多种不同类型的失败消息之一 最初我想编写向该服务发送请求的方法 这样如果成功 该方法不会返回任何内容 但如果由于某种原因失败 则会抛出异常 我不太介意这
  • alembic 并获取最后插入的值

    我正在使用 alembic 来管理我的数据库结构 使用 id 作为整数和主键添加表后 id 列将成为自动增量列 如何查询升级脚本中的数据 以便确保获得正确的 ID 我知道在本例中为 1 我知道怎么做 creating the table o
  • C# 中的委托问题

    在下面的程序中 DummyMethod 总是打印 5 但是如果我们使用注释代码 我们会得到不同的值 即 1 2 3 4 有人可以解释为什么会发生这种情况吗 delegate int Methodx object obj static int
  • Excel - 从数据透视表中提取列并将其显示在常规表中

    我想从数据透视表中的特定列中提取数据并将其显示在常规 Excel 表中 这可能吗 当数据透视表中有新数据时 它应该自动更新 我之前编写了一些代码将表从属于数据透视表 以便数据透视表尺寸或位置的任何更改都将反映在阴影表的尺寸和位置中 这有效地
  • 检测 X11 根窗口中的修改键释放

    总体目标就像 Windows 的 Alt Tab 所以我将使用这些键进行解释 我想 按 Alt gt 按 Tab gt 弹出窗口出现 gt 按住 Alt 的任何时候按 Tab gt 释放 Alt gt 弹出窗口消失 我无法检测到最终的 Al
  • Delphi EOutOfResources(GDI错误)

    我编写了一个应用程序 其中偶尔会出现 EOutofResources 错误 将 TBitmap32 保存到流时 由 Graphics 单元的 GD IError 方法引发 据我所知 它可能来自 gdi 限制或堆限制 我知道该进程的默认限制为
  • 在executeBatch()之后我需要一个connection.commit()吗?

    我必须检查同事的代码 我偶然发现了这段代码 private void pdate JdbcTemplate jdbcTemplate List
  • Microsoft Visual Studio 2019:无法打开项目文件。无法找到 .NET SDK

    我刚刚升级了我的视觉工作室2019到最新版本16 8 3突然间 我无法加载任何 C 项目 并且所有 NET Core 项目都出现以下错误 无法打开项目文件 无法找到 NET SDK 检查它是否已安装以及指定的版本 global json 如
  • PhoneGap 中可以集成支付网关吗?

    我想在 Android 和 IOS 的 PhoneGap 应用程序中实现支付网关集成 请帮助我执行正确的步骤 PhoneGap PayPal iPhone 插件 Here is link of PayPal Plugin for Phone
  • 从常规文件读取:阻止或返回更少的数据?

    是否有可能read to block 返回的数据少于请求的数据 从常规文件读取时 不包括 请求超过 SSIZE MAX 的数据 读取超出 EOF 的内容 信号中断 read 3 表明 排除上述条件 从常规文件读取时read永远不会返回少于请
  • 以编程方式膨胀 TextView 和 LinearLayout

    这里的问题是 在这两种情况下我没有得到相同的输出视图结果 我想修复情况 1 以获得与情况 2 相同的输出结果 膨胀textview和线性布局 然后以编程方式将textview添加到线性布局 将textview添加到xml中的线性布局中 案例
  • 如何将文本放入边框

    我正在尝试在边框中插入一些文本 但不知道该怎么做 我怎样才能在边框中间放置一些文本 下面是它应该看起来像的屏幕截图 尝试 HTML 图例标签 HTML图例 http www w3schools com tags tag legend asp
  • 如何使用C#获取Excel中当前打开的文档?

    我所需要的只是获取当前打开的 Microsoft Excel 实例中当前打开的文档列表 但我不知道 Excel 术语 不知道这些文档是否称为工作簿 工作表或窗口等 有任何想法吗 找到了 link http support microsoft
  • 如何将多个 xml 文件转换并合并为一个文件

    我希望您能帮助我使用 XSLT 将一些 XML 转换为新的 XML 我有选择多个 XML 并对它们应用 XSLT 的代码 我的问题是 XSLT 我想将这些 shop1 xml shop2xml 转换为 allshops xml 对于知道如何