如何提取 XML 中选定的值

如何提取 XML 中选定的值

我只想从类似内容的 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节点的节点值:protectedTrue

$ 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从中挑选。

相关内容