2013-11-26 152 views
-1

我正在使用VBScript获取节点,示例//employeeid。我得到长度大于0的节点列表。现在我需要做的是获取节点列表中每个节点的父XML。我正在尝试../../employeeidparent::invoicenumber。所有的退货null或长度为0找到节点后获得父节点

回答

0

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

//employeeid/.. 
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 

更新WRT Jobbo的评论:

使用

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

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

+1

此。你也可以在ndChild的上下文中执行XPath查询,比如:'ndChild.SelectSingleNode(“..”)'如果你喜欢保留所有的XPath(我通常会这样做) – Jobbo