我有以下xmllint
示例选择元素:
$ curl -s http://lists.opencsw.org/pipermail/users/2015-January/date.html |
xmllint --html --xpath '/html/body/p/b[contains(., "Messages:")]' -
<b>Messages:</b>
粗体元素后面是我感兴趣的消息数量。当我使用parent
轴时显示:
$ curl -s http://lists.opencsw.org/pipermail/users/2015-January/date.html |
xmllint --html --xpath '/html/body/p/b[contains(., "Messages:")]/parent::*' -
<p><b>Starting:</b> <i>Thu Jan 1 23:17:09 CET 2015</i><br><b>Ending:</b> <i>Sat Jan 31 14:51:07 CET 2015</i><br><b>Messages:</b> 28</p>
我认为following-sibling
轴可能会给我这个数字,但它没有这样做:
$ curl -s http://lists.opencsw.org/pipermail/users/2015-January/date.html |
xmllint --html --xpath '/html/body/p/b[contains(., "Messages:")]/following-sibling::*' -
XPath set is empty
答案 0 :(得分:2)
您所追求的此文本节点确实是以下兄弟节点,但它是 text 节点,而不是元素节点。像
这样的表达式following-sibling::*
仅查找以下元素的兄弟姐妹。要匹配文本节点,请使用text()
:
$ curl -s http://lists.opencsw.org/pipermail/users/2015-January/date.html |
xmllint --html --xpath '/html/body/p/b[contains(., "Messages:")]/following-sibling::text()'
上面的命令在Mac OS X上使用bash在我的计算机上不起作用 - 但我相信它对你有用。如果我先从curl
保存结果,然后使用
$ xmllint example.html --html --xpath '/html/body/p/b[contains(., "Messages:")]/following-sibling::text()'
结果是_28
。这不是一个真正的下划线,而是一个我想指出的空白。要删除前导空格,请使用
$ xmllint example.html --html --xpath 'normalize-space(/html/body/p/b[contains(., "Messages:")]/following-sibling::text())'
不,使用正则表达式不是一个真正的选择。