如何在XML中获取子节点的属性

时间:2016-05-31 22:11:17

标签: xml dom vbscript

我正在寻找一种从父节点获取子节点属性的方法。到目前为止,我有:

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

我目前正在寻找父节点中的paramstr。我目前的尝试是使用提供的代码

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

但是我无法正确地从节点中拉出字符串。

这是我试图从节点中提取的XML示例:

<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>

我只是想从

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

并获得结果

PIDA.MODEFL.CAS

作为一个字符串。到目前为止,我所看到的一切都没有奏效(无论是我的无能/误解还是缺乏可行的方法论。如果有人能够清除它,我将非常感激。再一次,我只是试图抓住一个属性来自父节点中的子节点。

1 个答案:

答案 0 :(得分:1)

这适用于我在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

输出为enter image description here