Невозможно прочитать атрибуты дочерних узлов, используя XML DOM в Access 2003
Я искал в Интернете, возможно, 8 часов, включая Experts Exchange и Stackru, и нашел других с такой же проблемой, но я не нашел решения этой проблемы.
Я прилагаю XML-файл, который использует атрибуты для хранения данных в родительском узле и трех зависимых дочерних узлах. Все атрибуты имеют уникальное имя. XML открывается во всех браузерах, и я уверен, что он "правильно сформирован". Я успешно написал код для чтения атрибутов родительского узла, но каждый раз, когда я пытаюсь написать код для чтения атрибутов дочерних узлов, я получаю ошибку времени выполнения 91 или ее нет вообще.
<Donors>
<Donor DonorID="34224" Email="tsmith@gmail.com" DonorFirstName="Tom" DonorMiddleName="" DonorLastName="Smith" DonorAddress1="2052 Main Street" DonorAddress2="" DonorCity="New York" DonorStateProv="New York" DonorPostalCode="10019" DonorPhoneHome="2125298624" DonorPhoneWork="" DonorPhoneWorkExt="" DonorPhoneMobile="" DonorEmailAlternate="">
<PageTypes>
<PageType OnlinePageType="Product Purchase" />
</PageTypes>
<Transaction>
<Transactions TransactionID="194" CCTransactionID="-999" OrderTimeStamp="2013-05-24T07:16:37.333" OrderTotal="110.0000" />
</Transaction>
<Products>
<Product ProductGroupName="First Pitch Tickets" ProductName="Single" ProductDescription="1 Ticket for $10" ClientCode="I000001351" ProductCount="1" TotalFees="0.0000" TotalAmount="10.0000" />
<Product ProductGroupName="First Pitch Tickets" ProductName="12 Tickets" ProductDescription="12 tickets for $100" ClientCode="I000001352" ProductCount="1" TotalFees="0.0000" TotalAmount="100.0000" />
</Products>
</Donor>
Я пробовал МНОГО перестановок следующего кода без успеха. Я приветствую любые предложения о том, как циклически проходить через этот XML, чтобы я мог обрабатывать и хранить данные в двух связанных таблицах.
Function ReadAttributes(ByVal strXML As String)
Dim xmldoc As New DOMDocument
Dim iNode As MSXML2.IXMLDOMNode
Dim iNode2 As MSXML2.IXMLDOMNode
Dim DonorNodeList As IXMLDOMNodeList
Dim iAtt As IXMLDOMAttribute
Dim iAtt2 As IXMLDOMAttribute
On Error GoTo ReadAttributes_OnError
xmldoc.async = False
xmldoc.loadXML strXML
If xmldoc.parseError.errorCode <> 0 Then
MsgBox "Invalid XML, Load Failed"
GoTo ReadAttributes_OnError
End If
Set DonorNodeList = xmldoc.getElementsByTagName("Donor")
For Each iNode In DonorNodeList
For Each iAtt In iNode.Attributes
MsgBox iAtt.Name & ": " & iAtt.nodeTypedValue
Next
Set iNode2 = iNode.firstChild
MsgBox iNode2.nodeName
For Each iAtt2 In iNode2.Attributes
MsgBox iAtt.Name & ": " & iAtt.nodeTypedValue
Next
Next
Exit Function
ReadAttributes_OnError:
MsgBox Err.Number & " - " & Err.Description
Exit Function
End Function
1 ответ
Всегда проверяйте строку XML, когда есть проблема для ее анализа,
Скопируйте строку, чтобы узнать, свободна ли она от ошибок.
Обновленный XML
<Donors>
<Donor DonorID="34224" Email="tsmith@gmail.com" DonorFirstName="Tom" DonorMiddleName="" DonorLastName="Smith" DonorAddress1="2052 Main Street" DonorAddress2="" DonorCity="New York" DonorStateProv="New York" DonorPostalCode="10019" DonorPhoneHome="2125298624" DonorPhoneWork="" DonorPhoneWorkExt="" DonorPhoneMobile="" DonorEmailAlternate="">
<PageTypes>
<PageType OnlinePageType="Product Purchase" />
</PageTypes>
<Transaction>
<Transactions TransactionID="194" CCTransactionID="-999" OrderTimeStamp="2013-05-24T07:16:37.333" OrderTotal="110.0000" />
</Transaction>
<Products>
<Product ProductGroupName="First Pitch Tickets" ProductName="Single" ProductDescription="1 Ticket for $10" ClientCode="I000001351" ProductCount="1" TotalFees="0.0000" TotalAmount="10.0000" />
<Product ProductGroupName="First Pitch Tickets" ProductName="12 Tickets" ProductDescription="12 tickets for $100" ClientCode="I000001352" ProductCount="1" TotalFees="0.0000" TotalAmount="100.0000" />
</Products>
</Donor>
</Donors>
Function ReadAttributes(ByVal strXML As String)
Dim xmldoc As New DOMDocument
Dim iNode As MSXML2.IXMLDOMNode
Dim iNode2 As MSXML2.IXMLDOMNode
Dim DonorNodeList As IXMLDOMNodeList
Dim iAtt As IXMLDOMAttribute
Dim iAtt2 As IXMLDOMAttribute
On Error GoTo ReadAttributes_OnError
xmldoc.async = False
xmldoc.LoadXML strXML
If xmldoc.parseError.ErrorCode <> 0 Then
MsgBox "Invalid XML, Load Failed"
GoTo ReadAttributes_OnError
End If
Set DonorNodeList = xmldoc.getElementsByTagName("Donor")
For Each iNode In DonorNodeList
For Each iAtt In iNode.Attributes
MsgBox iAtt.Name & ": " & iAtt.nodeTypedValue
Next
Set iNode2 = xmldoc.getElementsByTagName("Donor")(0)
For i = 0 To iNode2.ChildNodes.Length - 1
For Each iAtt In iNode2.ChildNodes(i).ChildNodes(0).Attributes
MsgBox iAtt.Name & ": " & iAtt.nodeTypedValue
Next
Next
Next
Exit Function
ReadAttributes_OnError:
MsgBox Err.Number & " - " & Err.Description
Exit Function
End Function