我正在尝试根据字段值person_id_external
对xml进行排序。
我使用的代码是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="A/B">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="C/person_id_external" order="ascending" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
有效载荷是:
<A>
<B>
<C>
<logon_user_name>10027</logon_user_name>
<person_id>1100111</person_id>
<person_id_external>10027</person_id_external>
</C>
</B>
<B>
<C>
<logon_user_name>428122</logon_user_name>
<person_id>11141</person_id>
<person_id_external>111358</person_id_external>
</C>
</B>
<B>
<C>
<logon_user_name>428122</logon_user_name>
<person_id>100441</person_id>
<person_id_external>10636</person_id_external>
</C>
</B>
</A>
结果提供了输入的副本,但没有排序。
预期结果是:
<A>
<B>
<C>
<logon_user_name>10027</logon_user_name>
<person_id>1100111</person_id>
<person_id_external>10027</person_id_external>
</C>
</B>
<B>
<C>
<logon_user_name>428122</logon_user_name>
<person_id>11141</person_id>
<person_id_external>10636</person_id_external>
</C>
</B>
<B>
<C>
<logon_user_name>428122</logon_user_name>
<person_id>100441</person_id>
<person_id_external>111358</person_id_external>
</C>
</B>
</A>
干杯, Vikcy
答案 0 :(得分:0)
- 根据您的修改进行编辑 -
在您的示例中,每个B
节点只有一个C
节点。因此,您必须对B
节点进行排序才能获得预期结果 - 您必须从其父A
的上下文中执行此操作:
<xsl:template match="A">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="C/person_id_external" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
请注意,默认排序数据类型为text
(即按字母顺序排列)。
答案 1 :(得分:0)
以下代码有效:
<xsl:template match="A">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="C/person_id_external" data-type="number" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
传入的有效负载的类型为数字。
干杯, 维卡斯辛格