2011-08-24 85 views
-1

的细节,如果有如下任何XML文件:脚本来提取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脚本

我试过grep的,但是,它被检索到提取workinstance id字段整个xml文件。 有人可以帮助我如何得到它?

+0

如果$ _ =〜/workinstance.*?id=\"([{"]*),'grep'

+0

'perl -nle'打印$ 1。 \“/一世;' thexmlfile.xml'抓住你想要的东西,但使用XML解析器代替 –

+0

仍然我无法做到这一点。是否有人可以帮助我plz – suvitha

回答

4

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

即使在最好的条件下,使用正则表达式解析XML本质上也是不可能的,所以越早放弃尝试使用grep来做到这一点,就越有可能获得更好的效果。

+0

+1,XMLStarlet在过去的一年中已经成为我不可或缺的工具。 –

0

如果你有红宝石

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

Ruby不在那里。 – suvitha

1

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

要做到提取您的标签,尽量做到以下几点:

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

的“肥皂/ Workinstance/@ ID”是一个XPath表达式,将得到Workinstance标签里面的id属性。通过使用“-v”标志,您可以要求xmlstarlet将提取的文本打印到标准输出。