-1

编辑:无论如何感谢您的帮助,忘记它..我将使用java直接在我的服务器上解析xml,然后直接从服务器将其下载到我的设备......这样更容易更快......

有人可以帮助我使用 sed 命令吗?我不太喜欢那个:)

我删除了这<title lang="en">条线,只让“pt”线..(设备限制)
我已经这样做了,它工作正常,像这样:

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

现在,我正在尝试执行我所说的代码,并从中获取内容<date></date>并将其放入<title lang="pt">应该会导致如下结果的内容:
<title lang="pt">[2011] Gigantes de Aço</title> 请注意,并非每个<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>
4

3 回答 3

1

为工作使用正确的工具。正则表达式不是处理 Xml 的正确工具。

于 2012-09-24T03:42:36.327 回答
0

我会说使用XSLT来重新创建XML你想要的方式。(Ecplise有一个很棒的 XSLT 引擎来实现这一点)。

教程

为工作使用正确的工具。正则表达式不是处理 Xml 的正确工具。(帕维尔斯,2012)

于 2012-09-24T03:47:48.537 回答
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删除除最后一行以外的所有行
  • x与 HS 交换模式空间 (PS)
  • s/\(<title[^>]*>\)\(.*<date>\(.*\)<\/date>\)/\1[\3] \2/修改标题
于 2012-09-24T06:50:19.763 回答