2017-10-17 7 views
1

以下のMWEでは、並べ替える一連の属性があり、次にXMLと属性の両方が出力されます。 I出力は見た目全体のXMLは、ソートされたとき:これはどのようにXSLソートを実行しても属性に作用しませんか?

attrZ attrA 
attrZ attrA 

:私は、属性の横に印刷する場合

<data attr="attrA">testA</data><data attr="attrZ">testZ</data> 
<data attr="attrZ">testZ</data><data attr="attrA">testA</data> 

しかし、私はソートされた出力を(昇順==が降順)得ることはありません可能?どうすれば入手できますか:

attrA attrZ 
attrZ attrA 

??

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">  
    <xsl:variable name="dataUnsorted" as="element()*"> 
      <data attr="attrZ">testZ</data> 
      <data attr="attrA">testA</data> 
    </xsl:variable> 

    <xsl:variable name="dataAscending" as="element()*"> 
     <xsl:perform-sort select="$dataUnsorted"> 
     <xsl:sort select="@attr" order="ascending"/> 
     </xsl:perform-sort> 
    </xsl:variable> 

    <xsl:variable name="dataDescending" as="element()*"> 
     <xsl:perform-sort select="$dataUnsorted"> 
     <xsl:sort select="@attr" order="descending"/> 
     </xsl:perform-sort> 
    </xsl:variable> 

    <xsl:template match="/"> 
      <xsl:message> 
      <xsl:copy-of select="$dataAscending"/> 
     </xsl:message> 
     <xsl:message> 
      <xsl:copy-of select="$dataDescending"/> 
     </xsl:message> 
     <xsl:message> 
      <xsl:value-of select="$dataAscending/@attr"/> 
     </xsl:message> 
     <xsl:message> 
      <xsl:value-of select="$dataDescending/@attr"/> 
     </xsl:message> 
     </xsl:template>  
</xsl:stylesheet> 

答えて

1

$dataAscending/@attr/@attrは、属性ノードを選択し、ドキュメントの順序でそれらをソートするステップは、そのノードを選択するステップ(https://www.w3.org/TR/xpath-31/#id-path-operator)に定義されている方法です。

あなたが順序を保持したい場合は、3つのオプションがあります。

  1. for in return表現を使用しますfor $e in $dataAscending return $e/@attr
  2. 並び替えをし、代わりに要素配列
  3. のXPath/XSLTを属性シーケンスを保存3+のみ:使用![email protected]
関連する問題