2017-06-23 46 views
0

我有節點<EnginesTimesQueues><NumberOfEngines>。我需要將這兩個節點的值分別更新爲36和ABC。VBScript中的SingleSelectNode

<job> 
    <Step number="3340"> 
    <Category name="Parameters"> 
     <Item name="EnginesTimesQueues" commarea="Y">6</Item> 
    </Category> 
    </Step> 

    <Step number="3360"> 
    <Category name="Parameters"> 
     <Item name="NumberOfEngines" commarea="Y">2</Item> 
    </Category> 
    </Step> 
</job> 

我試圖遍歷使用SingleSelectNode()與作爲節點的節點:

/Job/Step/Category/Item[@name='EnginesTimesQueues']|/Job/Step/Category/Ite[@commarea='Y'] 
/Job/Step/Category/Item[@name='NumberOfEngines']|/Job/Step/Category/Item[@commarea='Y'] 

最初在環路其更新EnginesTimesQueues值到36和第二時間,而不是更新到NumberOfEngines到「ABC」,它再次將EnginesTimesQueues更新爲'ABC'。

+0

請出示您的(VBScript)代碼和確切的錯誤信息。 –

回答

0

嘗試這樣的事情。

Select objNodeList = objDoc.DocumentElement.Selectnodes("/Job/Step/") 
objNodeList.Item(0).SelectSingleNode("/Category/Item[@name='EnginesTimesQueues']|/Category/Item[@commarea='Y']").Text = "36" 
objNodeList.Item(1).SelectSingleNode("/Category/Item[@name='NumberOfEngines']|/Category/Item[@commarea='Y']").Text = "ABC" 

用另一個解決方案更新答案。這個Xpath也應該可以工作。試一試。 /Job/Step [1]/Category/Item [@ name ='NumberOfEngines'] |/Job/Step [1]/Category/Item [@ commarea ='Y']

默認情況下,第一次出現「Step」作爲它的軌跡。我們需要明確指定節點索引來訪問特定的節點索引。

注意:我沒有在我的末尾運行此代碼。您可能需要一些調試。

+0

嗨Mithilesh,謝謝你的迴應。 我已經嘗試過步驟[1],但無法遍歷路徑。我收到一個錯誤,說'無效節點' – Prithvi

+0

你可以請試試這個,讓我知道結果 /Job/Step [position()= 2]/Category/Item [@ name ='NumberOfEngines'] |/Job /步驟[position()= 2]/Category/Item [@ commarea ='Y'] 請記住,位置總是從1開始,而不是從0開始。 –

0

除了一個事實,即方法名稱爲SelectSingleNode(),不SingleSelectNode(),而且XPath表達式是大小寫敏感的(因此/Job不會匹配節點<job>):你使用union表情,這意味着

/Job/Step/Category/Item[@name='NumberOfEngines']|/Job/Step/Category/Item[@commarea='Y'] 

將匹配<Item>節點,其name屬性值爲「NumberOfEngines」 以及<Item>節點,其commarea屬性的值爲「Y」。由於後者(子)表達式與兩個<Item>節點匹配,並且SelectSingleNode()將結果限制爲單個項目,因此您將再次獲得第一個節點。

如果你想在同一時間匹配節點的兩個屬性使用and操作:

/Job/Step/Category/Item[@name='NumberOfEngines' and @commarea='Y']