【问题标题】:How do I change some content that is not in a descendant element?如何更改一些不在后代元素中的内容?
【发布时间】:2013-08-06 09:08:23
【问题描述】:

我正在尝试修改 XML 文件中的内容。如果模式在标签中,那么它不应该被转换。文件其余部分中该模式的所有其他出现都应该被转换。

输入:

<abc>A change to a 1207.52 good of  <link>subheading 1207.91</link> from 
within that subheading or any 2004.92 other chapter.</abc>

在这里,我打算将\d{4}\.\d{2} 转换为&lt;adi&gt;\d{4}\.\d{2}&lt;/adi&gt;。但是&lt;link&gt; 标签中的模式也被修改了。

预期输出:

<abc>A change to a <adi>1207.52</adi> good of  <link>subheading 1207.91</link> from 
within that subheading or any <adi>2004.92</adi> other chapter.</abc>

请大家帮忙解决这个问题?

【问题讨论】:

  • 1207.52 不是也在标签内吗?
  • @mob 在这种情况下,我认为他指的是主标签abc之间的任何标签
  • 我不相信它可以用一个正则表达式替换来完成。
  • @mob 它可能在标签内,也可能不在标签内。
  • @hwnd 正则表达式应该修改除了 .. 标签之外的任何地方的模式。换句话说,逻辑应该忽略 标签内的文本。

标签: xml perl


【解决方案1】:

@Adithya Kiran : 将输入文件内容放入变量 $document 中,然后执行以下操作-

$document =~ s/(\d{4}\.\d{2})(?!(?:(?!<\/link>|<link>).)*<\/link>)/<adi>$1<\/adi>/isg;

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多