1

javascript で、動的に作成された XML データ アイランドを変換し、XSL ファイルを使用して並べ替えようとすると、XML の書式設定や適切なインデントなしで、並べ替えられたデータがすべて 1 行に表示されます。は全く使用されていないようです。結果の transformNode() で XML タグとインデントを生成する必要があります。

JavaScript コード:

var sourceXML = document.getElementById(XMLViewID); //textArea containing XML
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(sourceXML.value);

var xslDoc = new ActiveXObject("Microsoft.XMLDOM");
xslDoc.async=false;
xslDoc.load("xsl.xsl");

// This should be the sorted, formatted XML data, in tree and indented format?
var sorted = xmlDoc.transformNode(xslDoc);

XML データ:

    <table>
    <row>
        <A>j</A>
        <B>0</B>
    </row>
    <row>
        <A>c</A>
        <B>4</B>
    </row>
    <row>
        <A>f</A>
        <B>6</B>
    </row>
</table>

xsl.xsl:

<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

<xsl:template match="/">
    <xsl:apply-templates select="table/row">
        <xsl:sort select="A" order="ascending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="row">
    <xsl:value-of select="A"/>
    <xsl:value-of select="B"/>
</xsl:template>

'indent=yes' および 'omit-xml-declaration=no' を使用すると、結果の変換はインデントと書式設定を使用する必要があると想定します。

 <?xml version="1.0" encoding="UTF-16"?>
     <table>
       <row>
         <tr>
           <A>j</A>
           <B>0</B>
         </tr>
         <tr>
           <A>c</A>
           <B>4</B>
         </tr>
         <tr>
           <A>f</A>
           <B>6</B>
         </tr>
       </row>
     </table>

しかし、代わりに: c4f6j0 は 1 行で、フォーマットも XML タグもありません...

4

1 に答える 1

1

これまでのところ、XSLT はテキスト ノードしか生成しません。要素を含む XML が必要な場合は、次のようなコードで作成する必要があります。

<xsl:template match="table">
  <xsl:copy>
    <xsl:apply-templates select="row">
      <xsl:sort select="A"/>
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>
于 2013-08-28T09:03:54.010 に答える