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 不会匹配节点&lt;job&gt;)之外:您使用的是@ 987654321@表达式,意思是

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

将匹配name 属性值为“NumberOfEngines”的&lt;Item&gt; 节点以及 匹配&lt;Item&gt; 属性值为“Y”的&lt;Item&gt; 节点。由于后一个(子)表达式同时匹配 &lt;Item&gt; 节点,并且 SelectSingleNode() 将结果限制为单个项目,因此您将再次获得第一个节点。

如果要同时匹配节点的两个属性,请使用and 运算符:

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

【讨论】:

以上是关于VBScript 中的 SingleSelectNode的主要内容,如果未能解决你的问题,请参考以下文章

关于 VBScript 中的 CreateObject

HTA/VbScript - 下拉列表选项中的 If 语句

vbscript 查找范围中的最后一列

vbscript 查找范围中的最后一行

vbscript 找到word doc中的出现

vbscript MS Access中的超时功能