找到节点后获得父节点
问题描述:
我正在使用VBScript获取节点,示例//employeeid
。我得到长度大于0的节点列表。现在我需要做的是获取节点列表中每个节点的父XML。我正在尝试../../employeeid
或parent::invoicenumber
。所有的退货null或长度为0找到节点后获得父节点
答
要获得<employeeid>
您可以使用下面的XPath表达式的所有节点的父节点:
//employeeid/..
答
为了获得给定节点的父节点,使用该节点的.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
更新WRT Jobbo的评论:
使用
WScript.Echo ndChild.tagName, ndChild.selectSingleNode("../..").tagName
(标记两个步骤)从kain获得/能够通过XPath达到adam。
此。你也可以在ndChild的上下文中执行XPath查询,比如:'ndChild.SelectSingleNode(“..”)'如果你喜欢保留所有的XPath(我通常会这样做) – Jobbo