나는 이와 같은 것을 사용하여 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
값이 있는 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
데이터의 마지막 부분에 종료 개행 문자를 추가합니다.
노드의 특정 텍스트 title
(예: "contains text 3
")에 해당하는 URL을 선택하려면 다음을 사용하세요.
$ 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
그중에서 선택하고 선택합니다.