提取XML文件中相同内容的选择匹配值

提取XML文件中相同内容的选择匹配值

我将此命令用于以下 xml 文件。

xmlstarlet sel -t -v '//channel[protected = "True"]/playlist_url' -nl file.xml

和结果;

host.net/aa/vodpr
host.net/aa/vodpr/con_tv_r.php

我可以在结果中选择一行吗?示例仅最后一行或第 2 行?

<?xml version="1.0" encoding="UTF-8" ?>
<items>   

<channel>
<title><![CDATA[*** variable text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/15_info/]]></playlist_url>
</channel>

<channel>       
<title><![CDATA[*** variable text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/16_info/]]></playlist_url>
</channel>

<channel>      
<title><![CDATA[*** variable text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/vodpr/]]></playlist_url>  
<protected>True</protected> 
</channel>

<channel>
<title><![CDATA[*** variable text ***]]></title>
<playlist_url><![CDATA[http://host.net/aa/vodpr/con_tv_r.php]]></playlist_url>
<protected>True</protected> 
</channel>

</items>

答案1

要按列表中的位置从节点中选择playlist_url值,请使用并与某个正整数进行比较:channelposition()

$ xmlstarlet sel -t -v '//channel[position() = 4]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/con_tv_r.php

(在这种情况下,您可以使用 代替[4][position() = 4]

$ xmlstarlet sel -t -v '//channel[position() > 2]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
http://host.net/aa/vodpr/con_tv_r.php

要从未知长度的列表中获取最后两个,请将测试与last()

$ xmlstarlet sel -t -v '//channel[position() >= last() - 1]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
http://host.net/aa/vodpr/con_tv_r.php

要获取第二个“受保护”URL:

$ xmlstarlet sel -t -v '//channel[protected = "True"][2]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/con_tv_r.php

相关内容