VBScript 中的 SingleSelectNode
Posted
技术标签:
【中文标题】VBScript 中的 SingleSelectNode【英文标题】:SingleSelectNode in VBScript 【发布时间】:2017-06-23 07:37:18 【问题描述】:我有节点 <EnginesTimesQueues>
和 <NumberOfEngines>
。我需要将两个节点的值分别更新为 36 和 ABC。
<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”。
【问题讨论】:
请显示您的 (VBScript) 代码和确切的错误消息。 【参考方案1】:试试这样的。
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']
默认情况下,vbscript 会将第一次出现的“Step”视为要遍历的轨迹。我们需要显式指定节点索引来访问特定的。
注意:我最后没有运行此代码。您可能需要进行一些调试。
【讨论】:
您好 Mithilesh,感谢您的回复。我已尝试使用 Step[1] 但它无法遍历路径。我收到一条错误消息,提示“无效节点” 你能不能试试这个,让我知道结果 /Job/Step[position()=2]/Category/Item[@name='NumberOfEngines']|/Job/Step[position( )=2]/Category/Item[@commarea='Y'] 请记住,位置总是从 1 开始,而不是从 0 开始。【参考方案2】:除了方法名称是SelectSingleNode()
,而不是SingleSelectNode()
,并且XPath 表达式区分大小写(因此/Job
不会匹配节点<job>
)之外:您使用的是@ 987654321@表达式,意思是
/Job/Step/Category/Item[@name='NumberOfEngines']|/Job/Step/Category/Item[@commarea='Y']
将匹配name
属性值为“NumberOfEngines”的<Item>
节点以及 匹配<Item>
属性值为“Y”的<Item>
节点。由于后一个(子)表达式同时匹配 <Item>
节点,并且 SelectSingleNode()
将结果限制为单个项目,因此您将再次获得第一个节点。
如果要同时匹配节点的两个属性,请使用and
运算符:
/Job/Step/Category/Item[@name='NumberOfEngines' and @commarea='Y']
【讨论】:
以上是关于VBScript 中的 SingleSelectNode的主要内容,如果未能解决你的问题,请参考以下文章