【问题标题】:find and replace bunch of XML tags查找和替换一堆 XML 标记
【发布时间】:2015-03-07 17:47:13
【问题描述】:

我有一个简单的问题。我有一个包含数百万 XML 格式数据的巨大文件。我必须找到像下面这样的所有标签,然后什么都没有替换它们。 vim 或 sed 有什么帮助吗?

    <dtlsEntry>
    <dataTyp></dataTyp>
    <dataDtls></dataDtls>
    </dtlsEntry>

如果您观察到这一点,则 xml 标记中不存在任何值。我想删除从 dtlsEntry 到 dtlsEntry 的完整 XML

【问题讨论】:

  • 必填Zalgo链接;对于“数百万数据”,很难验证是否始终使用相同的格式(除非您熟记 XML 源),最好使用 XML 工具(如 xsltproc)。
  • 我们不要将其视为“百万”。让它成为 1000 个这样的 XML 标记..
  • 您能否发布一个您想要的输入和示例输出的快速示例?在我看之前,我想 100% 确定我明白你的意思。
  • 嗨,输入是这样的: 输出应该是什么

标签: regex shell vim scripting


【解决方案1】:

如 cmets 所示,在一般情况下,使用单个正则表达式可靠地执行此操作可能很困难或不可能。但是你可能有一个非常具体的案例。添加任何复杂性,它会很快变得丑陋。 如果 XML 中的 cmets 不存在,属性也不存在,并且如果顺序得到保证,则应该在 Vim 中执行此操作,但可能会很慢:

:%s#<dtlsEntry\_s*>\_s*<dataTyp\_s*></dataTyp\_s*>\_s*<dataDtls\_s*></dataDtls\_s*>\_s*</dtlsEntry\_s*>##

我在这里使用的唯一技巧是在允许任意空格的地方插入\_s*,以匹配任何空格,包括换行符。例如,如果 dataTyp 标记内可以有空格,则可能需要添加更多。但同样,请注意上述所有注意事项和限制。消除任何这些限制都会增加复杂性;事实上,特别是允许完整的 cmets 支持可能几乎是不可能的。

【讨论】:

  • 嗨 Ben,XML 中不会有 cmets;也不是属性;保证订购。我已经在 vim 中尝试过你的命令并且它正在工作。让我写一个包装脚本。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多