2013-10-08 71 views
0

我試圖解析filelists.xml(該RPM包的元數據)。從Bash或C解析filelists.xml?

標籤的樣子:

<package pkgid="b63972e0b2442412bd81bcb24065e264c02bc3fc" name="basesystem" arch="noarch"><version epoch="0" ver="10.0" rel="3_WR4.1.0.0" /></package> 

我需要解析這個格式的數據:package.name-version.ver

例如在上面的例子中,它將返回:basesystem-10.0

我想使用bash或C.

+0

在bash,我試圖與sed和awk命令。 與C,我試圖逐行閱讀,並開始採取「名稱= \」「和」「」之間的文本。 我認爲更好的方法來與bash再次嘗試。 –

+1

我認爲這不是足夠的信息。一個好的選擇是使用'perl'或'python'的xml解析器,但我不知道哪個格式具有'filelists.xml'。如果所有線路有相同的元素,並在相同的順序或許'sed'或'awk'可以足夠多的屬性,但誰知道......鑑於輸入我會用手工複製提取數據和粘貼:-) – Birei

+0

'egrep的 - o'(name | ver)=「[[:alnum:] \。] +」'| paste -s -d'\ n''會給你所需的鍵/值對。從那裏你可以手動解析出來,或者如果你對數據的安全性有信心,你可以用shell來「評估」它們。 – iscfrc

回答

1

每當你想從在bash XML獲取數據,認爲xmlstarlet

xmlstarlet sel -t -m '//package' -v '@name' -o '-' -v 'version/@ver'-o $'\n' 

此相匹配名爲「包」樹中的任何地方節點,並寫入「name」屬性,一個破折號,的「版本」中的子元素屬性名爲「版本」的值的值,最後換行。

這要比對待XML文件作爲文本簡單和更安全,並完全有效的fileutil.xml文件只是發生在不同的換行不會打破。