我将此命令用于以下 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
值,请使用并与某个正整数进行比较:channel
position()
$ 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