【问题标题】:Get a list of all invalid XML tags using Regex?使用正则表达式获取所有无效 XML 标记的列表?
【发布时间】:2014-01-27 17:31:50
【问题描述】:

我将 XML 包含在一个字符串中,该字符串包含许多无效的 xml 元素标签,如果标签以数字开头,则该标签为“无效”。例如以下是无效的:

 <1>....</1>, <123abc>, etc. 

在 XML 中,我们会将某些标签标识为无效:

 <tag1> ----> valid tag
     <1tagname>....</1tagname> --->invalid tagname
     <2tagname>....</2tagname> --->invalid tag name
 </tag1> ----> valid tag

我想获取一个无效的 xml 标签列表,我想添加一个特殊的字符串作为前缀,比如说“item”,以便将无效的标签名称转换为有效的标签名称。

我正在使用 Java 语言兼容的正则表达式。

【问题讨论】:

  • 无效标签意味着哪些没有结束标签??
  • 你能举个例子吗?
  • 标签名无效意味着不能以数字开头。
  • @abhijeet 它将有结束标签 rght ??或者我们可以说它遵循正确的 XML 规则
  • 我提供了一个例子。请看一看。

标签: java xml regex


【解决方案1】:

你可以用这个:

String result = yourstr.replaceAll("(?<=</?)(?=[0-9])", "item");

【讨论】:

  • 太棒了!非常感谢!!
【解决方案2】:

你可以使用堆栈。

说明:

这就像括号表达式是否有效的发现。 你的代码应该像这样工作:

  1. 读取 xml
  2. 对于每个开始标签,将其推入堆栈
  3. 对于每个结束标记,将其与堆栈顶部进行比较
  4. 如果不匹配 - 标记为问题 - 添加前缀
  5. 如果匹配 - 出栈
  6. 当完成读取 xml 并且堆栈中有元素时 - 添加前缀并关闭标签

这将解决 简单 的情况。 有一些极端情况,比如在合法标签中有不匹配的结束标签,也许更多

【讨论】:

  • 唯一的问题是没有 XML 解析器能够成功处理格式错误的 XML。
  • @MichaelKay - 你不需要 xml 解析器,你可以遍历字符串,寻找打开/关闭标签
  • 好的,我将“读取 XML”读作“将输入解析为 XML”。关键是输入不是 XML,我们正在寻找的东西不是(有效的)标签;我们正在阅读近似于 XML 的内容,并寻找近似于打开和关闭标签的内容。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 2011-11-21
  • 2015-03-17
  • 2015-02-08
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多