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
Javascript Xpath获取具有内部文本的所有链接_Javascript_Xpath - Fatal编程技术网

Javascript Xpath获取具有内部文本的所有链接

Javascript Xpath获取具有内部文本的所有链接,javascript,xpath,Javascript,Xpath,我想抓取一个包含内部文本的页面上所有链接的集合 这些都是有效案例: <a>Foo</a> <a><span>Bar</span></a> <a></a> <a><span></span></a> <a>Foo</a> <a><span>Bar</span></a> <a&g

我想抓取一个包含内部文本的页面上所有链接的集合

这些都是有效案例:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]
Foo
酒吧
这些案例无效:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]

我试过:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]
//a[text()]
但这会忽略跨度大小写

//a[not(text()='')
但这不会过滤掉空的大小写

是否有办法检查
text()=NULL

注意:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]

我知道我可以使用
document.links,然后手动筛选,但我希望只有一个干净的表达式。

正确的表达式是:

//a[normalize-space()]


谢谢你的启发。

正确的表达是:

//a[normalize-space()]


谢谢你给我的启发。

虽然@Seanny123的答案是正确的,但我会这样做:-

HTML:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]

虽然@Seanny123的答案是正确的,但我会这样说:-

HTML:

<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
<a>Foo</a>
<a><span>Bar</span></a>
<a></a>
<a><span></span></a>
//a[string()]

为什么只有
规范化-space()
?这也是有效的-
//a[string()]
。您测试它并让我知道,如果它正确,那么我希望它作为答案发布!:)显然,我对速度的要求有点过分了。在进一步的基准测试之后,我发现它们基本上是无法区分的,但我仍然更喜欢
string()
方法,因为它更可读。为什么只
normalize-space()
?这也是有效的-
//a[string()]
。您测试它并让我知道,如果它正确,那么我希望它作为答案发布!:)显然,我对速度的要求有点过分了。在进一步的基准测试之后,我发现它们基本上无法区分,但我仍然更喜欢
string()
方法,因为它更具可读性。