2013-10-08 27 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文件只是发生在不同的换行不会打破。