2011-08-24 39 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將提取的文本打印到標準輸出。