다음 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