Читать XML с классом c ASP (DACK) - PullRequest
1 голос
/ 08 апреля 2020

Я следовал за этим вопросом здесь: Чтение xml данных с использованием classi c ASP для начала, но я сталкиваюсь с ошибкой, и я не знаю, почему это так. Это может быть связано с тем, что DACK -стандарт файла XML отформатирован или может быть связано с невозможностью загрузить файл.

Я всегда получаю:

Требуемый объект: 'objXMLDo c .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

enter image description here

Можно ли это как-нибудь проверить? Я не слишком глубоко разбираюсь в classi c 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)

1 Ответ

0 голосов
/ 08 апреля 2020

Если вы уверены, что 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
...