2012-09-24 41 views
-1

編輯:感謝您的幫助,無論如何,忘記它..我將直接在java服務器上解析xml,然後直接從服務器下載到我的設備...它是更容易和更快的方式...使用sed在xml上移動文本

有人可以幫我使用sed命令嗎?我不是那麼好與:)

我刪除了<title lang="en">線,讓只有「PT」行。(設備的限制)
這個我已經做和它的正常工作,就像這樣:

sed -i '/<title lang=\"en\">/d' xmltv_clarotv.xml 
現在

,我試圖做的,我說的代碼,並加上得到<date></date>內容,並把它放在<title lang="pt">應該導致這樣的事情裏面:
注意,不是每個<programme>有場<date>
有人可以給我一個幫助嗎?它需要與sed命令和我將執行它的設備沒有太多的RAM和本機功能...

我想這樣做,因爲設備將解析它只承認'標題'和'說明' 字段...

一小片的XML的:

<programme start="20120923200000 -0300" stop="20120923222500 -0300" channel="T4H" program_id="0000278093" event_id="000000000887005" series_key=""> 
<title lang="pt">Gigantes de Aço</title> 
<title lang="en">Real Steel</title> 
<desc>Viva a adrenalina e o frenesi de uma atividade como a luta de Robôs. Esta é a história de um ex-campeão de boxe que, empurrado pelo forte desejo de uma criança, volta ao mundo da luta como um misterioso andróide. - www.revistaeletronica.com.br </desc> 
<credits> 
<director>Shawn Levy</director> 
<actor>Hugh Jackman</actor> 
<actor>Dakota Goyo</actor> 
<actor>Evangeline Lilly</actor> 
<actor>Anthony Mackie</actor> 
<actor>Kevin Durand</actor> 
<actor>Hope Davis</actor> 
</credits> 
<date>2011</date> 
<category lang="pt">Filme</category> 
<category lang="pt">Ação</category> 
<country>EUA/Índia</country> 
<video> 
<colour>yes</colour> 
</video> 
<rating system="Advisory"> 
<value>Programa impróprio para menores de 14 anos</value> 
</rating> 
<star-rating> 
<value>4/5</value> 
</star-rating> 
</programme> 
+0

不明白的問題。 – thb

+2

你應該使用XSLT – Pierre

回答

1

使用了合適的工具。正則表達式不是處理Xml的正確工具。

+0

我引用你的答案在我的,我希望你不介意。 +1代表 – Killrawr

0

我想說使用XSLT重新創建你想要的方式XML。 (Ecplise有一個很棒的XSLT引擎來實現這一點)。

教程

爲作業使用正確的工具。正則表達式不是處理Xml的正確工具。 (Pawelless,2012)

+0

問題是,我不會在PC上運行它,它應該在數字衛星電視解碼器上執行,它沒有太多的資源可用... = \ –

+0

你有沒有尋找基於XSLT引擎你的數字衛星電視模型? (我確定有一些可用),當你想要構建模式時,我指的是Eclipse。 – Killrawr

0

這可能會爲你工作(GNU SED):

sed '/^<programme/,/^<\/programme>/!b;/^<programme/{h;d};/^<title lang="en"/d;H;/^<\/programme>/!d;x;s/\(<title[^>]*>\)\(.*<date>\(.*\)<\/date>\)/\1[\3] \2/' file 

本質上講,你要存儲programme標籤之間的界限,刪除英文名稱並修改剩餘標題(或不)與日期。

說明:

  • /^<programme/,/^<\/programme>/!b只處理progrmame
  • /^<programme/{h;d}第一線,在保持空間(HS)覆蓋任何東西,刪除
  • /^<title lang="en"/d刪除英文名稱的所有其他
  • H追加行到HS
  • /^<\/programme>/!d刪除所有行exc EPT最後
  • x交換模式空間(PS)與HS
  • s/\(<title[^>]*>\)\(.*<date>\(.*\)<\/date>\)/\1[\3] \2/修改標題
+0

在這裏沒有工作......它只是刪除了標題「en」,使「程序」翻了一番,「pt」標題仍然是一樣的...... –

+0

我犯了一個錯誤,留在「p」命令中更長的需要。該命令已被刪除,並針對您提供的示例進行了測試。我正在使用GNU sed,也許這會導致你的問題? – potong