2014-05-07 109 views
0

我想基於特定屬性的值的XML文檔的子元素進行排序。排序的子元素的字母順序基於屬性值

這裏是的test.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="sort.xsl"?> 
<resources> 
    <string name="zero">test</string> 
    <string name="alfa">test</string> 
    <string name="foxtrot">test</string> 
    <string name="golf">test</string> 
</resources> 

這裏是sort.xsl:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="resources"> 
     <assembly> 
      <xsl:apply-templates select="string"> 
       <xsl:sort select="@name" order="ascending" data-type="text" /> 
      </xsl:apply-templates> 
     </assembly> 
    </xsl:template> 
</xsl:stylesheet> 

據我所知,這應該符合resources元素下的所有元素string和嘗試他們按字母順序排序,這將使下面的輸出:

<resources> 
    <string name="alfa">test</string> 
    <string name="foxtrot">test</string> 
    <string name="golf">test</string> 
    <string name="zero">test</string> 
</resources> 

這不起作用。這是我寫過的第一個XSL轉換。我正在使用XML記事本2007,並且沒有任何內容顯示在我的XSL輸出屏幕中。沒有解析錯誤,只是一個空白的屏幕。我完全錯了嗎?我試圖去找一些代碼here

回答

2

正在處理中排序順序字符串元素,但你沒有一個模板匹配他們,所以添加

<xsl:template match="string"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

或通用模板,如果你需要處理的其他節點,以及複製節點。

+0

謝謝,這做到了。 –

+0

嘿@MattK你能不能粘貼最後的xsl –

2

沒有什麼是顯示在我的XSL輸出屏幕上。沒有解析錯誤,只是 一個空白的屏幕。

如果在輸出中沒有顯示出來,那麼問題不在於排序。您的樣式表,當應用到你的輸入,應該產生以下結果:

<?xml version="1.0"?> 
<assembly>testtesttesttest</assembly> 

這可能不是你所期望的結果 - 但它不是空白的,所以找錯誤你如何啓動轉換過程,之前拋光你的樣式表。

-
順便說一句,儘管很難看出,結果中的4個測試字符串按父字符串的name屬性排序。

+0

確實,XML記事本似乎有些腥意。我嘗試了一個在線編輯器,並獲得了該輸出。 –