1

在比较 xml 文件时,我需要在无法比较中添加一条规则。我需要忽略以包含单词的内容开头并以单词exclude="true" 结尾的节点</File>

  <File name="LogData.txt" exclude="true" type="TIMESTAMP">
   <Date>2012-09-27 17:43:36.211</Date>
  </File>

我设法为我的示例实例创建了一个规则,如下所示:

开始于: <File name="LogData.txt" exclude="true" 结束于: </File>

但我需要一些更通用的东西,它会忽略任何包含 exclude="true" 属性的 File 节点。

4

1 回答 1

0

你的解决方案是什么?您是否尝试过使用这样的正则表达式: 在此处输入图像描述

Text from-expression<File (.*)exclude="true"可以尽可能频繁.*地表达任何字符


另一种解决方案是使用外部转换。

我写了这样的小红宝石脚本:

File.open(ARGV.last, "w"){|f|
  f.write(File.read( ARGV.first).gsub( %r{<(.+?)\s[^>]+exclude="true".*?>(.*?)</\1>}m, ""))
}

它将第一个参数作为源文件名,并将转换后的 xml 写入目标文件。

此脚本可用作转换工具:

在此处输入图像描述

这个比较: 在此处输入图像描述 变成 在此处输入图像描述

而不是脚本,我也成功地使用了一个班轮

ruby -e "File.open('%t', 'w'){|f| f.write(File.read('%s').gsub( /]+exclude=.true.. ?>(. ?)</File>/m, ''))}"

如果您将脚本调整为

File.open(ARGV.last, "w"){|f|
  f.write(File.read( ARGV.first).gsub( %r{(<(.+?)\s[^>]+exclude="true".*?>(.*?)</\2>)}m, "<!--\n\\1\n-->"))
}

排除的部分不会被删除,而是设置为注释 ( <!-- ... -->),您会得到: 在此处输入图像描述

差异现在是一个不重要的差异(蓝色而不是红色),您可以忽略此差异。

备注: * 如果你想使用我的脚本你需要 ruby​​。* 如果需要,您可以用另一种语言编写转换脚本。* 我使用的正则表达式没有经过很好的测试。嵌套标签可能有问题。

于 2016-03-26T11:29:51.627 回答