我需要按孙子的值对节点进行排序。为此,我找到了不同的示例,但是子 G_SG16 出现了几次,我需要添加一个限定符(此处为 DOC)。也可能是限定符 DOC 没有退出。
这里应该排序的行项目节点 G_SG15 包括所有子注释:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:DESADV96A xmlns:ns0="urn:DESADV">
<DifferentNodes/>
<G_SG10>
<G_SG15>
<S_LIN>
<D_1082>10</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>333</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>20</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>111</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>30</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>222</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>40</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
</G_SG10>
</ns0:DESADV96A>
结果应该是这样的。没有 DOC 的节点是否出现在排序列表的开头或结尾并不重要。
result
<?xml version="1.0" encoding="UTF-8"?>
<ns0:DESADV96A xmlns:ns0="urn:DESADV">
<DifferentNodes/>
<G_SG10>
<G_SG15>
<S_LIN>
<D_1082>20</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>111</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>30</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>222</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>10</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>DOC</D_1153>
<D_1154>333</D_1154>
</C_C506>
</S_RFF>
</G_SG16>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
<G_SG15>
<S_LIN>
<D_1082>40</D_1082>
</S_LIN>
<G_SG16>
<S_RFF>
<C_C506>
<D_1153>WE</D_1153>
<D_1154>Customer</D_1154>
<D_1156/>
<D_4000/>
</C_C506>
</S_RFF>
</G_SG16>
</G_SG15>
</G_SG10>
</ns0:DESADV96A>
我测试了这个,但它只是按原样返回源文本:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="G_SG15">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="/G_SG16/S_RFF/C_C506/D_1154" order="ascending" data-type="text"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当然,预选赛仍然没有,但我希望他能以某种方式开始排序。
我正在为此使用在线编辑器。有谁知道 XSLT 的好(免费)调试器?特别是为什么我的规则没有被使用,我无法用一个简单的编辑器看到。
感谢您的支持 :-) 克里斯