2016-05-31 5 views
2

Ich bin auf der Suche nach einer Methode, um ein Attribut eines untergeordneten Knotens aus dem übergeordneten Knoten greifen. Bisher habe ich:Wie greifen Sie ein Attribut von Kind-Knoten in XML

For each dataNodedsd in xmlDocBindings.SelectNodes("//dataobject") 
    nodesDsdID = dataNodedsd.getAttribute("objectid") 
    set parentNode = dataNodedsd.parentNode 
    if d.Exists(nodesDsdID) Then 
     d.item(nodesDsdID) = parentNode.getAttribute("ID") 
     paramstr = parentnode.selectsinglenode("property[@name='pointrefparamname']").text 
     msgbox paramStr 
     d2key = parentNode.getAttribute("ID") 

     'add ids to dict2 

     d2.add d2key, "" 
    End If 

Ich bin derzeit auf der Suche nach paramstr aus dem übergeordneten Knoten zu ziehen. Mein aktueller Versuch war die Verwendung des Codes zur Verfügung gestellt

paramstr = parentnode.selectsinglenode("property[@name='pointrefparamname']").text 

Allerdings kann ich nicht richtig die Zeichenfolge aus dem Knoten ziehen.

Dies ist ein Beispiel von XML, die ich von dem Knoten zu ziehen versucht bin:

<dataobject format="propertybag" type="HMIPage.Generic" id="3"> 

<property name="AddressFlags">1</property> 

<property name="AddressType">0</property> 

<property name="CalloutElement"/> 

<property name="ObjectType">0</property> 

<property name="ParameterFormat">0</property> 

<property name="PointRefFlags">0</property> 

<property name="PointRefParamName">PIDA.MODEFL.CAS</property> 

<property name="PointRefParamOffset">0</property> 

<property name="PointRefPointName">00FC1627</property> 

<property name="PresentationType">0</property> 

<property name="SecurityLevel">0</property> 

<property name="UpdatePeriod">0</property> 

<property name="version">1.3</property> 

</dataobject> 

ich von

<property name="PointRefParamName">PIDA.MODEFL.CAS</property> 

und erhalten das Ergebnis

ziehen würde einfach versuchen,
PIDA.MODEFL.CAS 

als eine Zeichenfolge. Bisher hat alles, was ich nachgeschlagen habe, entweder nicht funktioniert (entweder wegen meiner Inkompetenz/meines Missverständnisses oder wegen des Mangels an praktikablen Methoden. Wenn jemand das klären könnte, wäre es sehr geschätzt. Ich versuche wieder einmal, ein Attribut von einem zu bekommen Kind-Knoten innerhalb eines übergeordneten Knoten.

+0

nicht sicher, ob dies das Problem ist, aber in dieser Zeile nodesDsdID = dataNodedsd.getAttribute ("objectid") ... es gibt kein Attribut "objectid" auf dem "dataobject" -Tag. –

+0

Es ist nur extra Code von einem anderen r XML, das ich Informationen ziehen und mit diesem XML vergleichen musste –

+0

Als nächstes sehe ich, dass Sie für "pointerrefparamname" vergleichen, aber der Name ist eigentlich "PointRefParamName" ... Fall ist in XML wichtig –

Antwort

1

Dies funktioniert für mich in VBA

Sub getValXml() 
    Dim myDocument As DOMDocument30 
    Dim parNodes As IXMLDOMNodeList 
    Dim parNode As IXMLDOMNode 
    Dim myNode As IXMLDOMNode 
    Set myDocument = New DOMDocument30 

    myDocument.Load ("C:\temp\text.xml") 
    Set parNodes = myDocument.SelectNodes("//dataobject") 
    For Each parNode In parNodes 
    Set myNode = parNode.SelectSingleNode("property[@name='PointRefParamName']") 
    MsgBox myNode.Text 
    Next 
End Sub 

der Ausgang ist enter image description here

+0

Die Frage besteht darin, nach einer VBScript-Lösung zu fragen, die VBA-Antworten * (solange sie korrekt sind) * zu verkomplizieren. Es braucht nicht viel, um diese Lösung in VBScript zu modifizieren, einfach die Verwendung von Typen * (wie VBScript ist Typ-los) * entfernt und Sie sollten irgendwo in der Nähe sein. – Lankymart

+1

Sorry, ich ging vom Titel (der VBA sagt) und nicht vom Tag. –

+0

Fairer Punkt, bemerkte den Titel nicht. – Lankymart

Verwandte Themen