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
Html 按属性值和通配符选择具有Xpath的元素_Html_Xpath_Xquery - Fatal编程技术网

Html 按属性值和通配符选择具有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>

我试图学习xpath,但我似乎找不到任何人使用通配符获取元素的结果。我不确定这是否或如何可能

示例

<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")]