我只想从类似内容的 XML 文件中提取一个值。
例子;
<?xml version="1.0" encoding="UTF-8" ?>
<items>
<channel>
<title><![CDATA[*** text 1 text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/15_info/]]></playlist_url>
</channel>
<channel>
<title><![CDATA[*** text 2 text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/16_info/]]></playlist_url>
</channel>
<channel>
<title><![CDATA[*** text 3 text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/vodpr/]]></playlist_url>
<protected>True</protected>
</channel>
<channel>
<title><![CDATA[*** text 4 text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/vodpr/con_tv_r.php]]></playlist_url>
<protected>True</protected>
</channel>
</items>
我需要单独提取'http://host.net/aa/vodpr/' 和 'http://host.net/aa/vodpr/con_tv_t.php' 变量 url 值。
此致
答案1
假设您想要获取具有 value 的playlist_url
节点的每个channel
节点的节点值:protected
True
$ xmlstarlet sel -t -v '//channel[protected = "True"]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
http://host.net/aa/vodpr/con_tv_r.php
这用于xmlstarlet
将 XPATH 查询应用于文档。最后-nl
在最后一段数据中添加一个终止换行符。
要选择与节点中的特定文本相对应的 URL title
(例如“contains text 3
”),请使用
$ xmlstarlet sel -t -v '//channel[./title[contains(., "text 3")]]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
在这里,我们检测节点text 3
值中的文本title
并选择该特定channel
节点。然后我们playlist_url
从中挑选。