【问题标题】:How to select all text via XPath in Chrome console如何在 Chrome 控制台中通过 XPath 选择所有文本
【发布时间】:2022-08-08 07:52:40
【问题描述】:

在 Chrome\'s Debugger\'s Console 窗口中,我想将一个数组(有点扁平化)转换为字符串,如下所示:

<div class=\"foo\">
  <div class=\"bar\">a</div>
  <div class=\"bar\">b</div>
</div>

并得到这个结果: a b

这有效,但似乎是一个黑客:

var arr = $x(\'//*[@class=\"foo\"]/descendant-or-self::*/text()\')
for (i in arr) { console.log(arr[i].data); };

但是text() 当然会返回一个数组,而我只想要文本。

  • 请注意,没有带有@id=\"foo\" 的元素。你的意思是@class=\"foo\"
  • 是的,感谢您指出这一点。我刚刚更新了这个问题。

标签: html xml google-chrome xpath


【解决方案1】:

要在 XPath 1.0 中获取 XML 文档的所有文本,请使用 string()

> $x("string(/)")
< '\n  a\n  b\n'

要规范化空格(同样是 XPath 1.0),请使用 normalize-space()

> $x("normalize-space(/)")
< 'a b'

用任何元素选择 XPath(例如 //*[@class="foo"])替换 / 以将文本限制为(XPath 1.0 中的第一个)选定元素的后代。

请注意,string-join() 需要 XPath 2.0, which is not supported in Chrome

【讨论】:

    【解决方案2】:

    试试这个以获得单个字符串由两个用空格字符连接的子文本值组成

    string-join(//div[@class="bar"], " ")
    

    或者

    string(//div[@class="foo"])
    

    要得到父节点的字符串表示

    【讨论】:

    • 在 Chrome (103.0.5060.114) 调试器控制台中,无论我向 string-join 发送什么参数,我都会收到错误消息,例如:string-join("hi") VM9617:1 Uncaught ReferenceError: string is not defined at &lt;anonymous&gt;:1:1
    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多