如何使用regex或其他方式更改xml或任何其他文件中的链接



我有一个文件,里面有很多xml节点,它们用id链接在一起。我需要更改节点的id和链接。

<event id="12345">
<action>6789</action>
</event>
<action id="6789">
<name>pre-filter1</name>
<someotherlink>45678</someotherlink>
</action>

我需要更改操作节点的id和从何处链接的引用。我之所以研究regex,是因为我必须为一些只有特定名称的操作节点做这件事,比如这里的预过滤器。在替换为新值之前,需要通过一些逻辑处理id。节点的顺序是随机的。我只需要为整个文件做一次,任何方式都可以。时间复杂性也不是限制。

感谢您的帮助。

Perl支持在替换正则表达式时使用函数。不确定其他语言。

如果您不使用perl,您可以执行以下操作:

1( 使用以下正则表达式获取给定名称的所有操作ID:

<actions*id="(d+)">(?=[^=]*<name>pre-filterd</name>).*?</action> 

https://regex101.com/r/Q7lKgx/1

2( 转换值并将原始id和转换后的值存储在哈希中。

3( 循环散列并使用regexp将id替换为新值

这与操作和操作id:都匹配

(<action(?:s*id="|>))(THE_ID)("|</action)> ==> replace with 1NEW_ID3

无论如何,用正则表达式解析XML通常不是一个好主意,所以最好使用一些库来解析XML。

最新更新