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

값이 있는 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데이터의 마지막 부분에 종료 개행 문자를 추가합니다.


노드의 특정 텍스트 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그중에서 선택하고 선택합니다.

관련 정보