【发布时间】:2014-05-25 23:04:44
【问题描述】:
鉴于此 XML:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<chapter-section-datasource>
<section id="12" handle="chapter-section">Chapter Section</section>
<entry id="94">
<order handle="1">1</order>
</entry>
</chapter-section-datasource>
<page-content>
<section id="9" handle="page-content">x</section>
<chapter-section link-id="94">
<entry id="87">
<section-id>0</section-id>
</entry>
<entry id="91">
<section-id>2</section-id>
</entry>
<entry id="93">
<section-id>1</section-id>
</entry>
<entry id="103">
<section-id>3</section-id>
</entry>
</chapter-section>
</page-content>
</data>
还有这个 XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="data">
<xsl:apply-templates select="chapter-section-datasource/entry[1]" mode="bal"/>
</xsl:template>
<!-- Map Results -->
<xsl:key name="guide" match="chapter-section" use="@link-id" />
<xsl:template match="entry" mode="bal">
<xsl:apply-templates select="key('guide', @id)" mode="balGuide">
<xsl:sort select="section-id" data-type="number" order="ascending" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="chapter-section/entry" mode="balGuide">
<xsl:element name="div">
<xsl:value-of select="section-id"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
预期输出为:0,1,2,3
实际输出为:0,2,1,3
为什么排序没有按我的预期工作?请注意,转换的复杂性是由于更复杂的 XML 和 XSL 已为本示例进行了简化。
如果重要的话,转换是在 C# 中完成的
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(Server.MapPath("Xml/simple.xml"));
System.Xml.Xsl.XslTransform trans = new System.Xml.Xsl.XslTransform();
trans.Load(Server.MapPath("Xml/simple.xsl"));
Xml1.Document = doc;
Xml1.Transform = trans;
【问题讨论】: