【发布时间】:2014-02-12 11:14:03
【问题描述】:
任务看起来很简单:按属性“id”的值对输入文档中的所有元素进行(本地)排序;否则内容应保持不变。
输入 XML
<?xml version="1.0" encoding="utf-8"?>
<A>
<Group>
<Item id="c"/>
<Item id="a"/>
<Item id="b"/>
</Group>
<Group>
<Item id="f"/>
<Item id="d"/>
</Group>
</A>
期望的输出
<?xml version="1.0" encoding="utf-8"?>
<A>
<Group>
<Item id="a"/>
<Item id="b"/>
<Item id="c"/>
</Group>
<Group>
<Item id="d"/>
<Item id="f"/>
</Group>
</A>
请注意,排序对于每个 Group 项目都是本地的。这应该很简单:
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="yes" />
<!-- Modified identity -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="@id" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:transform>
实际输出
<?xml version="1.0" encoding="utf-8"?>
<A>
<Group>
<Item id="a"/>
<Item id="b"/>
<Item id="c"/>
</Group>
<Group>
<Item id="d"/>
<Item id="f"/>
</Group>
</A>
问题是不需要的换行符。我使用 Saxon6.5.5、Saxon-PE 9.4.0.4、Saxon-HE 9.4.0.4、Saxon-EE 9.4.0.4 获得了这个结果。 Xalan 引入了相同的换行符以及额外的格式错误。
我一直盯着自己看,所以我会很感激任何建议。
【问题讨论】: