11 bash xpath xml-parsing
我正在编写一个小脚本来学习如何解析XHTML网页.以下命令:
cat q?s=goog.xhtml | xpath '//span[@id="yfs_l10_goog"]'
Run Code Online (Sandbox Code Playgroud)
收益:
Found 2 nodes:
-- NODE --
<span id="yfs_l10_goog">624.50</span>-- NODE --
<span id="yfs_l10_goog">624.50</span>
Run Code Online (Sandbox Code Playgroud)
我如何能:
需要编写我的命令才能提取值624.50?
我只需要提取一次它需要做什么?
源页面我正在解析:http://finance.yahoo.com/q?s = goog
Pau*_*ce. 17
编辑2:
尝试一下:
xpath -q -e '//span[@id="yfs_l10_goog"][1]/text()'
Run Code Online (Sandbox Code Playgroud)
编辑:
管道您的输出:
sed -n '/span/{s/<span[^<]*>\([^<]*\)<.*/\1/;p;q}'
Run Code Online (Sandbox Code Playgroud)
原始答案:
使用xmlstarlet:
echo -e '<foo><span id="yfs_l10_goog">624.50</span>\n<bar>xyz</bar><span id="yfs_l10_goog">555.50</span>\n<span id="yfs_l10_goog">123.50</span></foo>' |
xmlstarlet sel -t -v "//span[@id='yfs_l10_goog']"
Run Code Online (Sandbox Code Playgroud)
查询结果:
624.50
Run Code Online (Sandbox Code Playgroud)
结果echo:
<foo><span id="yfs_l10_goog">624.50</span>
<bar>xyz</bar><span id="yfs_l10_goog">555.50</span>
<span id="yfs_l10_goog">123.50</span></foo>
Run Code Online (Sandbox Code Playgroud)
结果xml fo:
<?xml version="1.0"?>
<foo>
<span id="yfs_l10_goog">624.50</span>
<bar>xyz</bar>
<span id="yfs_l10_goog">555.50</span>
<span id="yfs_l10_goog">123.50</span>
</foo>
Run Code Online (Sandbox Code Playgroud)
其他查询:
$ echo -e '...' | xmlstarlet sel -t -v "//span[@id='yfs_l10_goog'][1]"
624.50
$ echo -e '...' | xmlstarlet sel -t -v "//span[@id='yfs_l10_goog'][3]"
123.50
$ echo -e '...' | xmlstarlet sel -t -v "//span[@id='yfs_l10_goog'][last()]"
123.50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26412 次 |
| 最近记录: |