Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB6中将连接字符串作为索引XPath表达式进行求值_Xpath_Vb6_Concatenation_Evaluation - Fatal编程技术网

如何在VB6中将连接字符串作为索引XPath表达式进行求值

如何在VB6中将连接字符串作为索引XPath表达式进行求值,xpath,vb6,concatenation,evaluation,Xpath,Vb6,Concatenation,Evaluation,我通过在VB6中连接字符串构建了Xpath表达式: strXPath = "xDOC.selectNodes(" & """/GroupType1""" & ").item(" & CStr(i) & ").selectNodes(" & """/OperationStageCollection/OperationStage""" & ").length" “i”是用于索引到的整数 我想计算strXPath以获得循环计数器,例如:

我通过在VB6中连接字符串构建了Xpath表达式:

    strXPath = "xDOC.selectNodes(" & """/GroupType1""" & ").item(" & CStr(i) & ").selectNodes(" & """/OperationStageCollection/OperationStage""" & ").length"
“i”是用于索引到的整数

我想计算strXPath以获得循环计数器,例如:

    n = CInt(strXPath)
n被声明为整数;strXPath被声明为字符串。VB6在上述计算表达式上引发类型不匹配错误。我一定错过了什么明显的东西。如何计算strXPath


我意识到XPath表达式本身可能有错误,但我想让计算工作起来,以便调试这些可能的错误。

尝试删除一些双引号:

iLength = xDOC.selectNodes("/GroupType1").item(i).selectNodes("/OperationStageCollection/OperationStage").length
这将以整数形式返回所需的
length
属性


然后,您可以在循环中使用
ilelength

@BRW:您的两个问题都非常具体,即如何使用XPath实现某些结果。但我怀疑,如果你解释你试图从XML中检索什么(数据),注释者可能会告诉你你没有想到的方法,例如说你想在一个
中迭代所有
,单个
可以通过
//GroupType1/OperationStageCollection/OperationStage/operationventcollection/operationvent[1-based-index]
检索,例如
//GroupType1/OperationStageCollection/OperationStage/operationventcollection/operationvent[1]
,这将导致一个XML节点:

 <OperationEvent>
      <OperationEventDate1>2018-12-16</OperationEventDate1>
      <OperationEventCode>5</OperationEventCode>
      <OperationEventDate2>2018-05-16</OperationEventDate2>
 </OperationEvent>

2018-12-16
5.
2018-05-16

因此,取而代之的是多个
selectNodes
方法,一个正确的XPath查询可能会立即产生所需的结果。

谢谢埃蒂安。这正是我在决定尝试串联字符串方法之前所做的。我想知道是否实际计算了索引值,因为不管我如何调整表达式,XPath表达式都返回0。现在我想知道在一个表达式中有两个selectNodes是否合适。编译器接受它,但我得到0个节点。你可以在我的相关文章中看到我的xml。我将此标记为答案,因为你让我回到了正确的轨道。在我对@Hel的评论中,我已经指出了似乎有效的小变化。再次感谢。谢谢,我很感激!对XPath进行故障排除可能会很乏味,但您增加了一层额外的复杂性!祝您在项目“我已经通过在VB6中串联字符串构建了XPath表达式”的其余部分好运:-不,您已经通过串联字符串构建了VB6代码。这是行不通的,你真的不想对此进行评估。展示你的XML并描述你想要实现什么,而不是仅仅描述你想要如何实现一些你自己没有解释的东西。你是对的——我用串联字符串的方法把自己引入了一个死胡同。我是在读了另一篇我现在不能很快找到的帖子后开始这样做的,但我可能还是误解了它。在我对@Hel的评论中,我已经指出了似乎有效的方法。FWIW,
xDOC.selectNodes(“/GroupType1”)。item(I)。selectNodes(“/OperationStageCollection/OperationStage”)。Length
xDOC.selectNodes(/GroupType1[”&(I+1)&“]/OperationStageCollection/OperationStage”)。Length
应该是相同的(XPath从1开始计数,VB从0开始计数,因此出现了
+1
)注释。谢谢。我正在逐渐弄明白这一点……谢谢大家。我想我已经弄明白了。
xDOC.selectNodes(“/GroupType1”).item(I).selectNodes(“../OperationStageCollection/OperationStage”).length
给出了正确的结果。我需要做的是处理与索引节点相关的子节点,
/
似乎让我明白了这一点。