访问div中的元素

时间:2015-09-08 10:12:22

标签: html xpath

我试图通过搜索特定的“值”来使用xpath访问元素,这里是元素:

<body>
    <div class="smenu" id="smenu4">
        <input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" />
        <!--> Lots of inputs <!-->
    </div>
</body>

我要访问的元素是<input> tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" </input>

我尝试使用的xpath是://div[*/text()='smenu4']/descendant::input[@value='FindEng']

但它不会被发现。什么是正确的xpath

我是xpath的新手,如果这是一个愚蠢的问题我会道歉。

1 个答案:

答案 0 :(得分:2)

根据我的评论,首先你的HTML是无效的(它在语法上不正确,但它绝对不是你的意思)。这就是格式化元素的方式:

<!--Using Auto Close-->
<input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng" />
<!--Using Manual Close-->
<input tabIndex="-1" type="button" onclick="SearchEng" value="FindEng"></input>

一旦整理好了,那么你的XPath就有点乱了......

您使用的是text()='smenu4',但您的示例HTML已id="smenu4"text() node-test允许您获取元素中的文本,因此我认为这不会起作用...而是尝试@id='smenu4'

然后您正在搜索[@value='SearchEng'],但value未设置为SearchEng,而是设置为FindEng。所以这应该是[@value='FindEng']

然而,整个事情可以简单地写成......

//div[@id='smenu4' and input[@value='FindEng']]

<强>更新

我刚刚回到这里并重新阅读了这个问题,上面的XPath不正确,因为它会返回<div>所在的input

这就是我认为你想要的(假设input将是div的直接后裔)......

//div[@id='smenu4']/input[@value='FindEng']

否则,如果它不一定是直系后代,那么使用......

//div[@id='smenu4']/descendant::input[@value='FindEng']

(我现在承认这实际上与你原来的很接近,所以我收回了我的“一点点混乱”声明......对不起!)