使用xmllint从XML读取CDATA标记值,而在shell脚本中没有任何额外信息

时间:2016-07-28 13:06:21

标签: xml shell xmllint

如何在没有任何额外信息的情况下从xml读取cdata标记信息

的test.xml

<EncodingKeys>
    <Streaming> 
        <![CDATA[54G91A8?s7^F97C]Fyj*8&kR2eU+HNg!]]>
    </Streaming>
    <Uploads> 
        <![CDATA[&^%&^*vsfgsdfEw#z2etVCTSN@Sb!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#z2etVCTSN@Sb!F2

预期产出:

54G91A8?s7^F97C]Fyj*8&kR2eU+HNg!
&^%&^*vsfgsdfEw#z2etVCTSN@Sb!F2

为什么我会&amp;取代&。我还可以看到更长的id变量。

有人可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

使用xml_grep!

准备测试文件

    $cat test.xml
    <EncodingKeys>
        <Streaming> 
            <![CDATA[54G91A8?s7^F97C]Fyj*8&kR2eU+HNg!]]>
        </Streaming>
        <Uploads> 
            <![CDATA[&^%&^*vsfgsdfEw#z2etVCTSN@Sb!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#z2etVCTSN@Sb!F2