合并然后排序两个xml文件

达西德

我一直在寻找答案,坦率地说,我想出了很多可能的答案,以至于我不知所措,所以我仍然不确定如何进行。

我有两个XML文件,我想将它们合并在一起,然后根据三个独立的标准进行排序。

当然,每个文件都具有相同的结构:

<root>
    <item>
        <number>1</number>
        <name>Name</name>
        <time>6h</time>
        <internal>NAME_01</internal>
        <flag>0</flag>
    </item>
</root>

我只是想将两个文件合并在一起,然后进行排序。排序需要按以下顺序进行:

  • 标志(可以是0或1。0排在最前面。)
  • 数字(从1到20的简单数字。将按照从低到低的顺序排序。)
  • 名称(简单的字母顺序。)

我已经看到了许多有关XSLT的建议,但我对此一无所知。我不反对使用它,但前提是我已获得有关如何实现它的一些说明。不过,它不一定是XSLT。我愿意接受任何选择,简单是关键。可以为我做到这一点的免费应用程序(可下载或基于Web的应用程序)将是我的圣杯。

可接受的排序示例如下:

<root>
    <item>
        <number>1</number>
        <name>Apple</name>
        <time>6h</time>
        <internal>FRUIT_APPLE_01</internal>
        <flag>0</flag>
    </item>
    <item>
        <number>1</number>
        <name>Banana</name>
        <time>2h</time>
        <internal>FRUIT_BANANA_01</internal>
        <flag>0</flag>
    </item>
    <item>
        <number>4</number>
        <name>Cabbage</name>
        <time>1h 15m</time>
        <internal>VEGETABLE_CABBAGE_02</internal>
        <flag>0</flag>
    </item>
    <item>
        <number>4</number>
        <name>Cucumber</name>
        <time>25m</time>
        <internal>FRUIT_CUCUMBER_01</internal>
        <flag>0</flag>
    </item>
    <item>
        <number>12</number>
        <name>Avocado</name>
        <time>12h</time>
        <internal>FRUIT_AVOCADO_03</internal>
        <flag>0</flag>
    </item>
    <item>
        <number>3</number>
        <name>Cat</name>
        <time>6h</time>
        <internal>MAMMAL_01</internal>
        <flag>1</flag>
    </item>
    <item>
        <number>8</number>
        <name>Iguana</name>
        <time>1h</time>
        <internal>REPTILE_04</internal>
        <flag>1</flag>
    </item>
</root>

请让我知道是否可以澄清任何事情。

非常感谢。

C队

假设您的文件中没有重复项,那么实际上并没有那么复杂。

由于您根本不转换项目元素,因此您可以使用身份模板开始

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

然后,您只需要编写一个模板来匹配(第一个XML文档的)元素,因为您将通过添加和重新排序其子节点来对其进行更改。

在合并这方面,只写一个XSL:申请模板选择电流的元素元素,而项目第二XML文件中的元素。可以与xsl:sort指令结合使用

     <xsl:apply-templates select="item|document($mergeFile)/root/item">
        <xsl:sort select="flag" />
        <xsl:sort select="number" data-type="number" />
        <xsl:sort select="name" />
     </xsl:apply-templates>

注意使用文档功能来读取第二个XML文件。在这种情况下,$ mergeFile是一个参数,设置为您希望与XML当前作用的第一个文件合并的第二个文件的位置。

就是这样!试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>
   <xsl:param name="mergeFile" select="'Test2.xml'" />

   <xsl:template match="/*">
      <xsl:copy>
         <xsl:apply-templates select="item|document($mergeFile)/root/item">
            <xsl:sort select="flag" />
            <xsl:sort select="number" data-type="number" />
            <xsl:sort select="name" />
         </xsl:apply-templates>
      </xsl:copy>
   </xsl:template>

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Laravel - 合并两个集合后排序?

来自分类Dev

使用AWK连接两个文件的某些行,然后对合并的文件进行排序

来自分类Dev

PHP遍历XML文件,放入数组,然后排序

来自分类Dev

在Python中合并两个文件并进行排序

来自分类Dev

合并两个排序文件中的记录

来自分类Dev

合并两个文件并对其进行排序

来自分类Dev

Javascript拖放文件,然后排序

来自分类Dev

合并两个文件

来自分类Dev

合并两个文件

来自分类Dev

合并两个文件

来自分类Dev

使用SAS合并两个XML文件

来自分类Dev

使用XSLT合并两个XML文件

来自分类Dev

如何使用Maven合并两个XML文件?

来自分类Dev

合并和分组两个XML文件中的数据

来自分类Dev

根据条件合并两个xml文件

来自分类Dev

使用SAS合并两个XML文件

来自分类Dev

在合并两个XML文件之前添加root

来自分类Dev

如何使用Maven合并两个XML文件?

来自分类Dev

使用新节点合并两个 xml 文件

来自分类Dev

合并两个不同的列表,然后按C#上的公共属性排序?

来自分类Dev

合并两个集合,保留排序顺序,然后以交错格式显示

来自分类Dev

合并两个Notepad ++文件,然后覆盖其中一个文件

来自分类Dev

从两个xml文件对XSLT进行排序

来自分类Dev

从两个xml文件对XSLT进行排序

来自分类Dev

两个条件的索引匹配,然后排除以前返回的值

来自分类Dev

Mongodb-合并子文档中的数组,然后排序

来自分类Dev

合并两个列表并递归排序

来自分类Dev

合并两个排序的链表

来自分类Dev

合并两个排序的单链表