如何使用 xslt 对文档进行排序?

发布于 2025-01-07 05:55:54 字数 2378 浏览 0 评论 0原文

下面是 document_1.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>30</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>20</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>25</Quantity>
    </product>
</products>

document_2.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>10</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>5</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>2</Quantity>
    </product>
</products>

以及 document.xml

<products>
</products>

下面是我的 xsl,我曾经加入 document_1 .xmldocument_2.xmldocument.xml

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

<xsl:template match="/products">
<xsl:copy>
<xsl:apply-templates select="document('document_1.xml')/*/product"/>
<xsl:apply-templates select="document('document_2.xml')/*/product"/>
</xsl:copy>
</xsl:template>

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

</xsl:stylesheet>

我需要如下输出

  1. 按数量 ASC 排序

    <前><代码><产品>; <产品> <名称>包 <数量>2 <产品> <名称>铅笔 <数量>5 <产品> <名称>笔 <数量>10 <产品> <名称>铅笔 <数量>20 <产品> <名称>包 <数量>25 <产品> <名称>笔 <数量>30

below is the document_1.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>30</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>20</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>25</Quantity>
    </product>
</products>

and document_2.xml is

<products>
    <product>
        <name>Pen</name>
        <Quantity>10</Quantity>
    </product> 
    <product>
        <name>Pencil</name>
        <Quantity>5</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>2</Quantity>
    </product>
</products>

and document.xml is

<products>
</products>

Below is my xsl, i used to join document_1.xml and document_2.xml to the document.xml

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

<xsl:template match="/products">
<xsl:copy>
<xsl:apply-templates select="document('document_1.xml')/*/product"/>
<xsl:apply-templates select="document('document_2.xml')/*/product"/>
</xsl:copy>
</xsl:template>

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

</xsl:stylesheet>

I need output like below

  1. Sort by Quantity ASC

    <products>
        <product>
            <name>Bag</name>
            <Quantity>2</Quantity>
        </product>
        <product>
            <name>Pencil</name>
            <Quantity>5</Quantity>
        </product>
        <product>
            <name>Pen</name>
            <Quantity>10</Quantity>
        </product>
        <product>
            <name>Pencil</name>
            <Quantity>20</Quantity>
        </product>
        <product>
            <name>Bag</name>
            <Quantity>25</Quantity>
        </product>
        <product>
            <name>Pen</name>
            <Quantity>30</Quantity>
        </product> 
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放低过去 2025-01-14 05:55:54

xsl:sort 标签,但它只能在 xsl:for-each 循环内使用 - 例如。

<xsl:for-each select="document('document_1.xml')/*/product|document('document_2.xml')/*/product">
  <xsl:sort select="Quantity" data-type="number" />
  ...
</xsl:for-each>

there is xsl:sort tag , but it can be used only inside xsl:for-each loop - eg.

<xsl:for-each select="document('document_1.xml')/*/product|document('document_2.xml')/*/product">
  <xsl:sort select="Quantity" data-type="number" />
  ...
</xsl:for-each>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文