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ノードの各ノードのノード値を取得したいとしますchannelprotectedTrue

$ 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その中から選択して選択します。

関連情報