用于从xml中提取详细信息的脚本

时间:2011-08-24 04:18:43

标签: unix shell

如果有任何xml文件如下:

<soap env="abc" id="xyz">
<emp>acdf</emp>
<Workinstance name="ab" id="ab1">
<x>1</x>
<y>2</y>
</Workinstance>
<projectinstance name="cd" id="cd1">
<u>1</u>
<v>2</v>
</projectinstance>
</soap>

我想使用unix脚本

在workinstance中提取id字段

我试过grep但是,它正在检索整个xml文件。 有人可以帮助我如何获得它吗?

3 个答案:

答案 0 :(得分:4)

您可能需要考虑类似XMLStarlet的内容,它实现了XPath / XQuery规范。

使用正则表达式解析XML基本上是不可能的,即使在最好的条件下也是如此,所以越早放弃尝试用grep执行此操作,您可能会越好。

答案 1 :(得分:1)

XmlStarlet似乎是我一直在寻找的工具!

要提取标记,请尝试执行以下操作:

cat your_file.xml | xmlstarlet sel -t -v 'soap/Workinstance/@id'

“soap / Workinstance / @ id”是一个XPath表达式,它将在Workinstance标记内获取id属性。通过使用“-v”标志,您可以要求xmlstarlet将提取的文本打印到标准输出。

答案 2 :(得分:0)

如果你有Ruby

$ ruby -ne 'print $_.gsub(/.*id=\"|\".*$/,"" ) if /<Workinstance/' file
ab1