3

私は xslt の初心者で、単純な並べ替えでは機能しない以下のコードがあります。

<xsl:template match="ns0:MT_name">
<xsl:for-each select="name">
<xsl:sort select="name"/>
</xsl:for-each>
</xsl:template>

入力は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_name xmlns:ns0="http://example.com/sap/pi/TEST/xslt">
   <name>11</name>
   <name>88</name>
   <name>55</name>
</ns0:MT_name>

期待される出力:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_name xmlns:ns0="http://example.com/sap/pi/TEST/xslt">
   <name>11</name>
   <name>55</name>
   <name>88</name>
</ns0:MT_name>
4

3 に答える 3

2

に変更<xsl:sort select="name"/><xsl:sort select="."/>ます。現在のコンテキストはすでにnameです。


この XSLT 1.0 スタイルシートを試してください。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ns0="http://xyz.com/sap/pi/TEST/xslt">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="ns0:MT_name">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="name">
        <xsl:sort select="." order="ascending"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
于 2012-05-11T14:45:12.380 に答える
0

xsl:for-eachの本体はのみで構成されているため、テンプレートは出力を作成しませんxsl:sort。目的の出力を生成するために、スタイルシートは次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:ns0="http://xyz.com/sap/pi/TEST/xslt">

   <xsl:template match="ns0:MT_name">
      <xsl:copy>
         <xsl:for-each select="name">
            <xsl:sort select="." data-type="number"/>
            <xsl:copy-of select="."/>
         </xsl:for-each>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>
于 2012-05-11T14:52:28.963 に答える
0
<xsl:sort select="." order="ascending"/>

完全なテンプレートは

<xsl:template match="ns0:MT_name">
  <xsl:for-each select="name">
    <xsl:sort select="." order="ascending"/>
    <xsl:copy-of select="."/>
  </xsl:for-each>
</xsl:template>

また、あなたの例には ' マークがあることに気づきました

于 2012-05-11T14:44:45.743 に答える