0

ソースの Practice.xml を javascript から html に変換し、生成された html を空の DIV 要素に追加するための Practice.xsl ファイルを作成しました。

ここに Practice.xml があります

<feed>
 <feedback>
  <user>Naresh</user>
  <date>12 Oct, 2009</date>
  <comments>This blog has no stuff to rate it</comments>
 </feedback>
 <feedback>
  <user>Pokuri</user>
  <date>21 Dec, 2009</date>
  <comments>Naresh is right</comments>
 </feedback>
 <feedback>
  <user>Subbu</user>
  <date>30 Dec, 2009</date>
  <comments>I don't agree with both Naresh n Pokuri</comments>
 </feedback>
</feed>

これが Practice.xsl です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" indent="yes"/>
<xsl:template match="feed/feedback">
<html>
 <head>
  <title>Feedback Forum</title>
 </head>
 <body>
 <span style="display:block; padding: 5px 10px; background-color: #C9F0F9; width: 100%; margin-top:10px; border-left:10px solid #F9EBC9; border-bottom: 1px solid #000000;"><xsl:apply-templates select="user"/> on <xsl:apply-templates select="date"/></span>
 <span style="display:block; padding: 5px 10px; background-color: #CDF5CD; width: 100%; border-left:10px solid #F9EBC9;"><xsl:apply-templates select="comments"/></span>
 </body>
</html>
</xsl:template>
</xsl:stylesheet>

Firefox で XSLT 変換を使用するための JavaScript は次のとおりです。

function listOrders(){ 
 var XSLT = loadXSLT("Practice.xsl");
 var trasformedText;
 if(window.ActiveXObject){
  trasformedText = XMLDOM.transformNode(XSLT);
  document.getElementById("rightDIV").innerHTML=trasformedText;
 } else if(document.implementation && document.implementation.createDocument){
  **xsltProcessor = new XSLTProcessor();
  xsltProcessor.importStylesheet(XSLT);
  trasformedText = xsltProcessor.transformToFragment(XMLDOM, document);
  document.getElementById("rightDIV").appendChild(trasformedText);**
 } else {
  alert("Sorry your browser may not support xsl transformation.\n+Please check your browser documentation for further help");
 }

}

プロが問題を簡単に特定できる相対イメージ

Firefox の場合: http://img97.imageshack.us/img97/8509/firefoxk.jpg

4

3 に答える 3

1

生成された HTML ソースを表示します。正しく見えますか?each ののみを表示するのではなく、それぞれの完全な<html>ページを表示しています。 feedback<span>feedback

XSL を<xsl:for-each>for each フィードバックで変更する必要があります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" indent="yes"/>
<xsl:template match="feed">
<html>
 <head>
  <title>Feedback Forum</title>
 </head>
 <body>
 <xsl:for-each select="feedback">
  <span style="display:block; padding: 5px 10px; background-color: #C9F0F9; width: 100%; margin-top:10px; border-left:10px solid #F9EBC9; border-bottom: 1px solid #000000;"><xsl:apply-templates select="user"/> on <xsl:apply-templates select="date"/></span>
  <span style="display:block; padding: 5px 10px; background-color: #CDF5CD; width: 100%; border-left:10px solid #F9EBC9;"><xsl:apply-templates select="comments"/></span>
 </xsl:for-each>
 </body>
</html>
</xsl:template>
</xsl:stylesheet>

IE は 1 回の応答で複数の を表示することに寛容すぎる<html>ため、このブラウザーで動作しました。Firefox はより厳密に標準に準拠しています: DOM には1 つの 要素しか存在できません。<html>

于 2009-11-07T20:51:18.960 に答える
0

これが実際には質問に答えていないことはわかっていますが、クライアント側の xslt 変換は非常に危険であり、一貫性があまり保証されていません。私があなただったら、サーバー側の XSLT 変換を使用することを検討します。

于 2009-11-07T20:51:42.597 に答える
-1

xslファイルのロードにおけるFirefoxの速度が遅い可能性があります。そこで、それに対処するために次のコード変更を行いましたが、ファイルが小さいため無視しました。

ステートメントXMLDOM.async=falseを記述しました。XSLT.async = false;

function loadXML(){
    var XMLDOM;
    // if it is IE
    if(window.ActiveXObject){
        XMLDOM = new ActiveXObject("Microsoft.XMLDOM");
            // following staement added
        XMLDOM.async=false;
        XMLDOM.load("Practice.xml");
    } else if(document.implementation && document.implementation.createDocument){       
        XMLDOM = document.implementation.createDocument("", "", null);
            // following staement added
        XMLDOM.async=false;
        XMLDOM.load("Practice.xml");
    } else {
        alert("Sorry your browser may not support loading an external file.\n+Please check your browser documentation for further help");
    }
    return XMLDOM;
}

function loadXSLT(xsltFile){
    var XSLT;
    // if it is IE
    if(window.ActiveXObject){
        XSLT = new ActiveXObject("Microsoft.XMLDOM");
                // following staement added
        XSLT.async=false;
        XSLT.load(xsltFile);
    } else if(document.implementation && document.implementation.createDocument){       
        XSLT = document.implementation.createDocument("", "", null);
                // following staement added
        XSLT.async=false;
        XSLT.load(xsltFile);
    } else {
        alert("Sorry your browser may not support loading an external file.\n+Please check your browser documentation for further help");
    }
    return XSLT;
}
于 2009-11-08T11:53:16.337 に答える