首页 > 解决方案 > 使用经典 ASP (DACK) 读取 XML

问题描述

我在这里关注了这个问题:Reading xml data using classic ASP to begin with,但我遇到了一个错误,我不知道为什么会这样。这可能是由于此DACK标准导致 XML 文件被格式化或可能与无法加载文件有关。

我总是以:

所需对象:'objXMLDoc.documentElement'

到目前为止,我的功能看起来像这样

public function extractValTicketNumber(xmlResponse)
    Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
    objXMLDoc.async = false
    objXMLDoc.load Server.MapPath("/DOCK.xml")

    Dim xmlProduct
    For Each xmlProduct In objXMLDoc.documentElement.selectNodes("ns1:mt_DG_DACK_V3")
        Dim TicketNumber : TicketNumber = xmlProduct.selectSingleNode("ns1:ticketNo").text 
    Next
    response.write("Ticket Nummer: " & Ticketnummer)

end function

我的 XML 文件是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ns1:mt_DG_DACK_V3 xmlns:ns1="urn:dg:dack">
    <ns1:transactionID>012345678900000001</ns1:transactionID>
    <ns1:externalTicketID>IN-6543210</ns1:externalTicketID>
    <ns1:ticketNo>IN-0123456</ns1:ticketNo>
    <ns1:returnMessage>Message successfully received and validated</ns1:returnMessage>
    <ns1:returnCode>0</ns1:returnCode>
</ns1:mt_DG_DACK_V3>

的输出Server.MapPath("/DACK.xml")是正确的,因此应该加载文件。D:\TestIntranet\wwwroot\DOCK.xml

在此处输入图像描述

我可以以某种方式测试吗?我对经典的 ASP 并不太了解。

我试图将父节点更改为没有前缀的东西,testNode但仍然是同样的错误,所以我猜它与此无关。

更新:

我只是尝试将load字符串作为参数而不是文件,但错误仍然存​​在:

Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
dim xmlTestString : xmlTestString = "<Product><ProductCode>abc</ProductCode><ProductName>Name</ProductName></Product>"
objXMLDoc.async = False
objXMLDoc.load(xmlTestString)

标签: xmlvbscriptasp-classic

解决方案


如果您确信其中Server.MapPath()包含指向 XML 文件的有效路径,那么您接下来要检查的Load()是是否可以解析文件。

objXMLDoc.load Server.MapPath("/DOCK.xml")
If objXMLDoc.parseError = 0 Then
  'Document loaded successfully without errors
Else
  'Document cannot be parsed
  Call Response.Write(objXMLDoc.parseError.reason)
End If

推荐阅读