Visual Basic - XML con DOMDocument

Life is soft - evento anual de software empresarial
 
Vista:

XML con DOMDocument

Publicado por Daniel Bellido (3 intervenciones) el 05/02/2009 16:10:21
Hola,

Primero, si alguien lo necesita ver de manera mas clara que me envie un correo y le enviaria el xml para que pudiera verlo bien.

Me gustaria poder obtener el segundo <TrackingNumber>******</TrackingNumber> del siguiente XML, se encuentra dentro de <TrackingNumbers> utilizando del DomDocument.

He probado lo siguiente:

'Variables on guardarem l'informació obtinguda del XML
Dim Tracking, CustomerID As String

'Declarem l'objecte que ens servirà per llegir l'XML
Dim objParser As Object
Set objParser = CreateObject("MSXML2.DOMDocument")

'Dim objParser As MSXML2.DOMDocument
'Set objParser = New MSXML2.DOMDocument

'Amb la seguent linia fem que en el .Load no es validi el xml perque no falli al intentar obrir un xml convertit
objParser.validateOnParse = False
'Carreguem el XML convertit per obtenir el tracking de l'enviament/recollida que genera el UPS WorldShip
If (objParser.Load(sPath)) Then
Dim xNode As Object
Dim xNodeList As Object
'Dim xNode As MSXML2.IXMLDOMNode
'Dim xNodeList As MSXML2.IXMLDOMNodeList

'Carreguem la llista del Element del xml que ens interesi en xNodeList (CustomerID)
Set xNodeList = objParser.getElementsByTagName("CustomerID")
Dim NumPackDeliver As Integer
Dim TypeDeliver As String

'Set xNodeListTracking = objParser.getElementsByTagName("TrackingNumber")


'Pasem per tots els elements del xNodeList per guardar el valor a la variable

Dim SQLConsulta As String
Dim t As Integer
t = 0
For Each xNode In xNodeList
CustomerID = xNode.firstChild.nodeValue
Set r = CurrentDb.OpenRecordset("SELECT TypeDeliver, NumPackDeliver FROM tbDeliver WHERE (IDDeliver=" & CustomerID & ")")
TypeDeliver = r!TypeDeliver
NumPackDeliver = r!NumPackDeliver
r.Close

Dim xElementTracking As Object
Set xElementTracking = objParser.getElementsByTagName("TrackingNumber")

Dim Vueltas As String
Vueltas = (xElementTracking.length - 1) - (xElementTracking.length - NumPackDeliver)
For i = t To Vueltas + t
Tracking = xElementTracking.Item(i).firstChild.nodeValue
SQLConsulta = "INSERT INTO tbDeliverRefCarrier (FKDeliverRefCarrier, RefDeliverRefCarrier, TypeDeliverRefCarrier) VALUES(" & CustomerID & ",'" & Tracking & "', '" & TypeDeliver & "')"
Call Query_RunSQL(SQLConsulta)
t = t + 1
Next

Next xNode

El problema era que como el <NumeroTracking> sale dos veces añadia un numero de tracking erroneo al siguiente registro, y me salen trackings repetidos.

El archivo xml es el siguiente:

<?xml version="1.0" encoding="windows-1252"?>
<OpenShipments xmlns="x-schema:OpenShipments.xdr">
<OpenShipment xmlns="x-schema: OpenShipments.xdr" ShipmentOption="" ProcessStatus="Processed"><ShipTo><CustomerID> 27683 </CustomerID>
<CompanyOrName> NAZRUL ISLAM </CompanyOrName>
<Attention> (LOCUTORIO - INTERNET ) </Attention>
<Address1> C MESON DE PAREDES, 72 BJS. LOCAL 3 </Address1>
<Address2> 10:00-23:00 </Address2>
<Address3> 06489-1 </Address3><CountryTerritory>ES</CountryTerritory>
<PostalCode> 28012 </PostalCode>
<CityOrTown> MADRID </CityOrTown>
<Telephone> 634048290 </Telephone></ShipTo>
<ShipmentInformation>
<ServiceType> ST </ServiceType>
<NumberOfPackages> 1 </NumberOfPackages>
<DescriptionOfGoods> ENTREGAR ROLLOS </DescriptionOfGoods>
</ShipmentInformation>
<Package>
<Weight> 2 </Weight></Package>
<ProcessMessage>

<ShipmentRates>
<ShipmentCharges>
<Rate>
<Published>12,18</Published>
</Rate>
</ShipmentCharges>
<ShipperCharges>
<Rate>
<Published>12,18</Published>
</Rate>
</ShipperCharges>
<ReceiverCharges>
<Rate>
<Published>0,00</Published>
</Rate>
</ReceiverCharges>
<PackageRates>
<PackageRate>
<TrackingNumber>1Z5F29F96856401422</TrackingNumber>
<PackageCharges>
<Rate>
<Published>0,00</Published>
</Rate>
</PackageCharges>
<Delivery_AreaSurcharge>
<Rate>
<Published>0,00</Published>
</Rate>
</Delivery_AreaSurcharge>
</PackageRate>
</PackageRates>
</ShipmentRates>
<TrackingNumbers>
<TrackingNumber>1Z5F29F96856401422</TrackingNumber>
</TrackingNumbers>
<ImportID></ImportID>
<Reference1></Reference1>
<Reference2></Reference2>
</ProcessMessage>
</OpenShipment>

Alguien puede ayudarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder