Html 按属性值和通配符选择具有Xpath的元素
我试图学习xpath,但我似乎找不到任何人使用通配符获取元素的结果。我不确定这是否或如何可能 示例Html 按属性值和通配符选择具有Xpath的元素,html,xpath,xquery,Html,Xpath,Xquery,我试图学习xpath,但我似乎找不到任何人使用通配符获取元素的结果。我不确定这是否或如何可能 示例 <tr> <th class="textLeft textTop">Opgavebeskrivelse:</th> <td> <a id="m_Content_opgaverDS_abc" href="/about">click me</a>
<tr>
<th class="textLeft textTop">Opgavebeskrivelse:</th>
<td>
<a id="m_Content_opgaverDS_abc" href="/about">click me</a> <br>
<a id="m_Content_opgaverDS_123" href="/other_stuff">click me too</a><br>
</td>
</tr>
但这找不到任何元素。还有这个
//*[contains(@id, 'm_Content_opgaverDS')]
只找到第一个元素。我两者都需要:'(
编辑:
我使用SafariBrowser for Mac中的Javascript控制台来测试XPath。我将把这些XPath实现到一个iOS应用程序中,该应用程序使用safari浏览器来抓取一些网站
我已在浏览器中声明此函数:
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
然后像这样计算路径:getElementByXpath(//a[以(@id,'m_Content\u opgaverDS'))开头)
但是如果我删除.singleNodeValue
部分,我会得到一个错误:
TYPE_ERR(DOM XPath异常52):无法创建表达式
转换为返回指定的类型
试试这个:
检查
与函数名一样,它选择节点a
,其中@id
从第二个参数开始
Edit
:我得到了两个//a
你的答案与//*[contains(@id,'m_Content_opgaverDS')]
相似,他说它只返回一个项目。(我知道你的答案是正确的,但对他没有帮助)@zx485是的。它仍然只返回第一个元素。为什么会有不同的结果?您的第二个XPath表达式是正确的-应该返回两个结果。什么工具只给您一个结果?我猜您可能在XSLT 1.0 xsl:value指令中使用了该表达式,该指令会丢弃除以下内容之外的所有选定节点:首先是e。但这当然是个猜测,因为你还没有给我们完整的信息。
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
//a[starts-with(@id, "m_Content_opgaverDS")]