gpt4 book ai didi

java - XML 的 XSL 排序

转载 作者:行者123 更新时间:2023-12-01 15:48:51 25 4
gpt4 key购买 nike

请找到输入和输出 xml 文件。 XML 在“Code”节点上排序(按 CodeValue 排序)。

输入 XML

<?xml version="1.0" encoding="UTF-8"?>
<Service>
<Account>
<AccountNumber>AB1234</AccountNumber>
<Code>
<CodeType>ABC</CodeType>
<CodeValue>3456</CodeValue>
</Code>
<Code>
<CodeType>ZCR</CodeType>
<CodeValue>1234</CodeValue>
</Code>
<Bonus>
<BonusDescription>INCR</BonusDescription>
<BonusOfferNumber>1004</BonusOfferNumber>
</Bonus>
<Bonus>
<BonusDescription>BNP</BonusDescription>
<BonusOfferNumber>1326</BonusOfferNumber>
</Bonus>
<AccountOption>
<AccountOptionNumber>1</AccountOptionNumber>
<Supplier>
<SupplierName>HSBC</SupplierName>
<SupplierDetails>UK</SupplierDetails>
</Supplier>
<Supplier>
<SupplierName>BARCLAYS</SupplierName>
<SupplierDetails>US</SupplierDetails>
</Supplier>
</AccountOption>
</Account>
<Account>
<AccountNumber>AC7658</AccountNumber>
<Code>
<CodeType>HGV</CodeType>
<CodeValue>6780</CodeValue>
</Code>
<Code>
<CodeType>MNR</CodeType>
<CodeValue>67</CodeValue>
</Code>
<Bonus>
<BonusDescription>BNP</BonusDescription>
<BonusOfferNumber>5678</BonusOfferNumber>
</Bonus>
<Bonus>
<BonusDescription>INCR</BonusDescription>
<BonusOfferNumber>7804</BonusOfferNumber>
</Bonus>
<AccountOption>
<AccountOptionNumber>9</AccountOptionNumber>
<Supplier>
<SupplierName>NAT</SupplierName>
<SupplierDetails>US</SupplierDetails>
</Supplier>
<Supplier>
<SupplierName>LKM</SupplierName>
<SupplierDetails>GB</SupplierDetails>
</Supplier>
</AccountOption>
</Account>
</Service>

输出 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Service>
<Account>
<AccountNumber>AB1234</AccountNumber>
<Code>
<CodeType>ZCR</CodeType>
<CodeValue>1234</CodeValue>
</Code>
<Code>
<CodeType>ABC</CodeType>
<CodeValue>3456</CodeValue>
</Code>
<Bonus>
<BonusDescription>INCR</BonusDescription>
<BonusOfferNumber>1004</BonusOfferNumber>
</Bonus>
<Bonus>
<BonusDescription>BNP</BonusDescription>
<BonusOfferNumber>1326</BonusOfferNumber>
</Bonus>
<AccountOption>
<AccountOptionNumber>1</AccountOptionNumber>
<Supplier>
<SupplierName>HSBC</SupplierName>
<SupplierDetails>UK</SupplierDetails>
</Supplier>
<Supplier>
<SupplierName>BARCLAYS</SupplierName>
<SupplierDetails>US</SupplierDetails>
</Supplier>
</AccountOption>
</Account>
<Account>
<AccountNumber>AC7658</AccountNumber>
<Code>
<CodeType>MNR</CodeType>
<CodeValue>67</CodeValue>
</Code>
<Code>
<CodeType>HGV</CodeType>
<CodeValue>6780</CodeValue>
</Code>
<Bonus>
<BonusDescription>BNP</BonusDescription>
<BonusOfferNumber>5678</BonusOfferNumber>
</Bonus>
<Bonus>
<BonusDescription>INCR</BonusDescription>
<BonusOfferNumber>7804</BonusOfferNumber>
</Bonus>
<AccountOption>
<AccountOptionNumber>9</AccountOptionNumber>
<Supplier>
<SupplierName>NAT</SupplierName>
<SupplierDetails>US</SupplierDetails>
</Supplier>
<Supplier>
<SupplierName>LKM</SupplierName>
<SupplierDetails>GB</SupplierDetails>
</Supplier>
</AccountOption>
</Account>
</Service>

最佳答案

我可以描述<xsl:sort>详细,但是 w3schools 可以比我做得更好:

http://www.w3schools.com/xsl/el_sort.asp

您可以定义一个模板来按节点的值对任何节点进行排序,只需对身份模板稍作修改即可:

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

根据您的评论,我相信您需要这样的东西:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="sort" />

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:choose>
<xsl:when test="name() = $sort">
<xsl:apply-templates select="@* | node()">
<xsl:sort />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@* | node()" />
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

关于java - XML 的 XSL 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com