[英]Why doesn't xsl:sort work when using xsl:key?
鑒於此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所致,在本示例中,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;
你需要
<xsl:template match="entry" mode="bal">
<xsl:apply-templates select="key('guide', @id)/entry" mode="balGuide">
<xsl:sort select="section-id" data-type="number" order="descending" />
</xsl:apply-templates>
</xsl:template>
也就是說,您需要確保對entry
元素進行處理和排序(而不是唯一的父項,然后不進行排序,並且默認模板會按原始順序處理entry
元素)。
這是一個完整的樣式表,還更改了order="ascending"
就像您說要0,1,2,3
:
<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)/entry" 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">
<div>
<xsl:value-of select="section-id"/>
</div>
</xsl:template>
</xsl:stylesheet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.