2016-07-28 58 views
3

如何讀取從XML CDATA標籤信息,不需要任何額外的信息閱讀CDATA標記值

的test.xml

<EncodingKeys> 
    <Streaming> 
     <![CDATA[54G91A8?s7^F97C]Fyj*8&kR2eU+HNg!]]> 
    </Streaming> 
    <Uploads> 
     <![CDATA[&^%&^*vsfgsdfEw#[email protected]!F2]]> 
    </Uploads> 
</EncodingKeys> 

test.sh

Streamingkey="$(echo "cat /EncodingKeys/Streaming/text()" | xmllint --nocdata --shell test.xml | sed '1d;$d')" 
Uploadskey="$(echo "cat /EncodingKeys/Uploads/text()" | xmllint --nocdata --shell test.xml | sed '1d;$d')" 

echo $Streamingkey 
echo $Uploadskey 

實際輸出:

54G91A8?s7^F97C]Fyj*8&amp;kR2eU+HNg! 
&amp;^%&amp;^*vsfgsdfEw#[email protected]!F2 

預期輸出:

54G91A8?s7^F97C]Fyj*8&kR2eU+HNg! 
&^%&^*vsfgsdfEw#[email protected]!F2 

爲什麼我代替&越來越&amp;。我還可以看到更多的id變量。

有人能幫我解決這個問題嗎?

回答

1

使用xml_grep!

準備測試文件

$cat test.xml 
    <EncodingKeys> 
     <Streaming> 
      <![CDATA[54G91A8?s7^F97C]Fyj*8&kR2eU+HNg!]]> 
     </Streaming> 
     <Uploads> 
      <![CDATA[&^%&^*vsfgsdfEw#[email protected]!F2]]> 
     </Uploads> 
    </EncodingKeys> 

爲 '流' 使用

$ xml_grep --text_only 'Streaming' test.xml 

得到

54G91A8?s7^F97C]Fyj*8&kR2eU+HNg! 

爲 '上傳的' 使用

$ xml_grep --text_only 'Uploads' test.xml 

得到

&^%&^*vsfgsdfEw#[email protected]!F2