如果有任何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文件。 有人可以帮助我如何获得它吗?
答案 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