0

皆さん....これは、もともと「クラシックASP」の質問として投稿された編集版です。これは基本的に ASP コードですが、ASPX ファイル内にあり、ASPX 規則 (つまり、"Set " ステートメントなど) を満たすようにフォーマットされています。ただし、ASPX ファイルでコーディングされているため、一部の人々はそれを "クラシック ASP" と呼ぶことに反対しました。XSL 変換を読み込んで XLM をソートしようとすると、ページで何が間違っているのでしょうか?...

ASP を使用して XML ファイルをソートするために、XSL 変換ファイルを読み込もうとしています。ページの残りの部分は XML ファイルを問題なく処理していますが、判断できない理由により、XSL 変換ファイルの読み込みを拒否しているように見えます。ブラウザに URL を入力するとファイルが表示され、「Scripting.FileSystemObject」を使用してテキストを取得して出力できるため、ファイルがそこにあることがわかります。これが私のXSLファイルです。

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/Sensors" >
        <xsl:copy>
            <xsl:apply-templates select="sensor">
                <xsl:sort select="@location"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="sensor">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:apply-templates select="reading">
                <xsl:sort select="@label"/>
            </xsl:apply-templates>
        </xsl:copy>
   </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>   

以下のコードでは、XLM 文字列を 2 回出力します。最初にロードした後 (XMLDOC.text) と、変換後 (XSLT.text) です。xsl ファイル (XSLDOC.text) の読み込みから文字列も出力しますが、常に空白です。XMLDOC.text と XSLT.text の出力は同一です。

FileName = Server.MapPath("/" & "Sandbox/WeatherXLM.xml")   
xmlDoc = CreateObject("Microsoft.XMLDOM")
xmldoc.setProperty ("ServerHTTPRequest", true)
xmlDoc.setProperty ("ProhibitDTD", False)
xmlDoc.setProperty ("SelectionLanguage", "XPath")   
xmlDoc.validateOnParse = true
xmlDoc.async = "False"
xmlDoc.load(FileName)
    Select Case xmlDoc.parseError.errorCode
    Case 0 
                strResult = "Valid: " & FileName & vbCr
    Case Else
                strResult = vbCrLf & "ERROR! Failed to validate " & _
                FileName & vbCrLf & xmlDoc.parseError.reason & vbCr & _
            "Error code: " & xmlDoc.parseError.errorCode & ", Line: " & _
                       xmlDoc.parseError.line & ", Character: " & _
                       xmlDoc.parseError.linepos & ", Source: " & _
                       Chr(34) & xmlDoc.parseError.srcText & _
                       Chr(34) & " - " & Now & vbCrLf
        response.write ("<p>" & strResult & "</p>")
        End Select
response.write("<p> -->" & xmlDoc.text & "<-- </p>")
 'Load xls transform file
xslFileName = Server.MapPath("/" & "Sandbox/Sort2.xsl")
xslDoc = CreateObject("Microsoft.XMLDOM")
xslDoc.async = "False"
xslDoc.load(xslfilename)
    Select Case xslDoc.parseError.errorCode
    Case 0 
                strResult = "Valid: " & xslFileName & vbCr
    Case Else
                strResult = vbCrLf & "ERROR! Failed to validate " & _
                xslFileName & vbCrLf & xslDoc.parseError.reason & vbCr & _
            "Error code: " & xslDoc.parseError.errorCode & ", Line: " & _
                       xslDoc.parseError.line & ", Character: " & _
                       xslDoc.parseError.linepos & ", Source: " & _
                       Chr(34) & xslDoc.parseError.srcText & _
                       Chr(34) & " - " & Now & vbCrLf
        response.write ("<p>" & strResult & "</p>")
        End Select
response.write("<p>  2==>" & xslDoc.text & " <== </p>")
 'Transformed XLM and create the tables
xslt = Server.CreateObject("Microsoft.XMLDOM")
xslt.loadxml(xmlDoc.transformNode(xsldoc))
response.write("<p>  3==>" & xslt.text & " <== </p>")
    response.flush
%>

そして、上で述べたように、ページの残りの部分は、結果の XLM 文字列 (XSLT.text) を正しく処理します。

他の XML コントロール (Msxml2.DOMDocument、Msxml2.FreeThreadedDOMDocument) も試しましたが、同じ結果が得られました。私は何を間違っていますか?

4

0 に答える 0