找到节点后获取父节点

时间:2013-11-26 10:57:46

标签: xml vbscript

我正在使用VBScript来获取节点,例如//employeeid。我得到长度大于0的节点列表。现在我需要做的是获取节点列表中每个节点的父XML。我正在尝试../../employeeidparent::invoicenumber。全部返回null或长度为0。

2 个答案:

答案 0 :(得分:2)

要获取给定节点的父节点,请使用该节点的.parentNode属性:

  Dim sXML   : sXML = Join(Array( _
      "<?xml version=""1.0""?>" _
    , "<humans>" _
    , " <adam>" _
    , "  <children>" _
    , "   <kain></kain>" _
    , "   <abel></abel>" _
    , "  </children>" _
    , " </adam>" _
    , "</humans>" _
  ), vbCrLf)
  Dim oXDoc  : Set oXDoc = CreateObject( "Msxml2.DOMDocument.6.0" )
  Dim sXPath : sXPath    = "/humans/adam/children/*"
  oXDoc.setProperty "SelectionLanguage", "XPath"
  oXDoc.async = False
  oXDoc.loadXml sXML

  If 0 = oXDoc.ParseError Then
     Dim ndlAdamsChildren : Set ndlAdamsChildren = oXDoc.SelectNodes(sXPath)
     Dim ndChild
     For Each ndChild In ndlAdamsChildren
         WScript.Echo ndChild.tagName, ndChild.parentNode.parentNode.tagName
     Next
  Else
     WScript.Echo oXDoc.parseError.reason
  End If

输出:

kain adam
abel adam

更新了Jobbo的评论:

使用

WScript.Echo ndChild.tagName, ndChild.selectSingleNode("../..").tagName

(标记两个步骤)从kain /能够通过XPath获得adam。

答案 1 :(得分:0)

要获取所有节点<employeeid>的父节点,可以使用以下XPath表达式:

//employeeid/..