0

この記事に触発された、見栄えの良いログシステムを構築しています。私の一般的な設定は次のとおりです。

  1. Javascript で強化された html ページがあります。
  2. 今のところ、テストログとして使用する XML ドキュメントがあります。
  3. XML を HTML に変換する (および整形する) ために使用する XSLT ファイルがあります。

ページに XML ログ ファイルを動的にロードしたいので、html ドキュメントで次のコードを使用します。

function loadXMLDoc(dname) {
    if (window.ActiveXObject) {
        xhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
    }
    else {
        xhttp = new XMLHttpRequest();
    }
    xhttp.open("GET", dname, false);
    xhttp.send("");
    return xhttp.responseXML;
}

function displayResult(name) {
    if(name == null)
        xml = loadXMLDoc("testlog.xml");
    else
        xml = loadXMLDoc(name);
    xsl = loadXMLDoc("layout.xsl");
    document.getElementById("logview").innerHTML = "";
    // code for IE
    if (window.ActiveXObject) {
        ex = xml.transformNode(xsl);
        document.getElementById("logview").innerHTML = ex;
    }
        // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        resultDocument = xsltProcessor.transformToFragment(xml, document);
        document.getElementById("logview").appendChild(resultDocument);
}

動作: ユーザーがロードするローカル ファイルを選択すると、displayResult() が呼び出され、ローカル ファイルの名前が渡されます。次にスクリプトは、ディスクから XML ファイルと XSL ファイルをロードし、XML を HTML に変換してから、DIV のコンテンツをこの新しい HTML に置き換えます。

私のXMLは次のようになります。

<?xml version="1.0"?>
<RunTimeLog>
  <LogHeader>
    <StartDate>02-09-2013</StartDate>
    <StartTime>09:52</StartTime>
    <Platform>Windows 8</Platform>
    <MemoryTotal>1,048,576 kB</MemoryTotal>
  </LogHeader>
  <LogEvents>

    <LogEvent id="1">
      <Type>Warning</Type>
      <TimeIndex>00:01:34</TimeIndex>
      <File>application.cc</File>
      <Function>SomeFunction()</Function>
      <LineNumber>314</LineNumber>
      <Message>This is just a randum warning, nothing to worry about!</Message>
    </LogEvent>
    <LogEvent id="2">
      <Type>Debug</Type>
      <TimeIndex>00:01:34</TimeIndex>
      <File>application.cc</File>
      <Function>SomeFunction()</Function>
      <LineNumber>314</LineNumber>
      <Message>This is just a randum warning, nothing to worry about!</Message>
    </LogEvent>

  </LogEvents>
</RunTimeLog>

そして、私の XSLT には次の構造があります。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <font face="Arial" size="3" color="#000000">
      <b>Run info:</b>
    </font>
    <br/>
    <xsl:apply-templates select="RunTimeLog/LogHeader"/>
    <br/>
    <br/>
    <font face="Arial" size="3" color="#000000">
      <b>Log:</b>
    </font>
    <br/>
    <br/>
            <table border="1" width="100%" cellspacing="0" cellpadding="0" bordercolorlight="#000000" bordercolordark="#ffffff" bordercolor="#000000">
                <tr>
                    <td width="3%"  bgcolor="#000000"><font size="2" face="Arial" color="#FFFFFF"><b><center>#</center></b></font></td>
                    <td width="20%" bgcolor="#000000"><font size="2" face="Arial" color="#FFFFFF"><b><center>Time</center></b></font></td>
                    <td width="23%" bgcolor="#000000"><font size="2" face="Arial" color="#FFFFFF"><b><center>File</center></b></font></td>
                    <td width="50%" bgcolor="#000000"><font size="2" face="Arial" color="#FFFFFF"><b><center>Function</center></b></font></td>
                    <td width="4%"  bgcolor="#000000"><font size="2" face="Arial" color="#FFFFFF"><b><center>Line</center></b></font></td>
                </tr>
                <xsl:apply-templates select="RunTimeLog/LogEvents"/>
            </table>
  </xsl:template>

さて、私が抱えている問題は次のとおりです。これはすべて、XMLHttpRequest() を使用してファイルをロードする Firefox でうまく機能します。しかし、IE では ActiveX が使用され、スクリプト エラーが発生します。

  ex = xml.transformNode(xsl); 

エラーで

  SCRIPT16389: The stylesheet does not contain a document element.  The stylesheet may be empty, or it may not be a well-formed XML document.

私は他のスレッドやフォーラムで与えられた複数の解決策を試しました. また、IE で href を使用して XML と XSLT を使用するだけであれば、問題なく表示されます。これは、問題が ActiveXObject の読み込み機能にあると信じさせます。ここに問題が何であるかを明らかにできる人がここにいますか?

前もって感謝します、

百合

4

0 に答える 0