我有一個XML文件,我想解析成bash變量/數組。 我有限的Linux命令(busybox)可用,因爲我在一個NAS盒子上工作。bash將XML解析爲多維數組
我的XML文件是這樣的:
<?xml version="1.0" encoding="UTF-8"?> .
<WEBCAMS>
<CAM>
<DESCRIPTION>description for cam 1</DESCRIPTION>
<URL>http://myURLtoWebcam1/cam1/pic.jpg</URL>
<FILENAME>filename1</FILENAME>
</CAM>
<CAM>
<DESCRIPTION>description for cam 2</DESCRIPTION>
<URL>http://myURLtoWebcam2/cam2/pic.jpg</URL>
<FILENAME>filename2</FILENAME>
</CAM>
</WEBCAMS>
我的bash到目前爲止腳本:
#!/bin/sh
rdom() { local IFS=\> ; read -d \< E C ;}
while rdom; do
if [[ $E = DESCRIPTION ]]; then
counter=$((counter+1))
declare cam$counter="$C"
fi
done < webcams.xml
我希望得到像下面這樣的XML內容:
echo "Cam1 description: ${cam1[0]}"; ## should show: description for cam 1
echo "Cam1 URL: ${cam1[1]}"; ## should show: http://myURLtoWebcam1/cam1/pic.jpg
echo "Cam1 filename: ${cam1[2]}"; should show: filename1
echo "Cam2 description: ${cam2[0]}"; ## should show: description for cam 2
echo "Cam2 URL: ${cam2[1]}"; ## should show: http://myURLtoWebcam1/cam2/pic.jpg
echo "Cam2 filename: ${cam2[2]}"; ## should show: filename2
所以遠遠我只能將「DESCRIPTION」字段讀入bash變量。
任何想法如何將其他字段「URL」和「FILENAME」到我的數組/變量?由於我的NAS上有限的Linux命令,迄今爲止發現的解決方案並不適合或無法根據我的需要進行修改。
等一下。你有busybox shell嗎,還是有bash? ('#!/ bin/sh'通常類似於busybox在使用它的系統上執行'ash';即使在它是符號鏈接到bash的系統上,雖然它被調用爲' sh')。如果你真的有bash,並且你想能夠使用bash-only語法,你的shebang應該是'#!/ bin/bash'。 –
除此之外 - **完全**您在該系統上有哪些其他軟件?即使是在一個非常小的系統上,真正的XML解析器隱藏在某處(在解釋型語言運行庫(如Python)中,或者通過本地依賴項(如libxml2)安裝在shell可訪問的幫助程序中)並不罕見。使用這樣一個解析器的答案將會少得多錯誤發生(如果集成合作夥伴在*不應該發生變化時破壞它們*破壞他們的代碼中斷手寫的消費者非常煩人,並且有經驗的人傾向於對於要求嚴格分析XML的問題沒什麼耐心)。 –
順便說一下,'IFS = \> read -d \