2014-01-27 35 views
1

我有XML包含在一个字符串中有一个元素的许多无效的XML标记,其中一个标记是“无效”,如果它以数字开头。例如,以下是无效的:使用Regex获取所有无效的XML标记的列表?

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

在XML中,我们会找出某些标记为无效:

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

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

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

+0

无效标签平均? – Kick

+0

你能举个例子吗? – Mzf

+0

无效标签名称意味着它不应以数字开头。 – abhijeet

回答

1

您可以使用此:这是没有关闭标签

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

真棒!非常感谢 !! – abhijeet

-1

您可以使用堆栈。

说明:

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

  1. 读取XML
  2. 对于每个打开的标记,将其推入堆栈
  3. 对于每一个结束标签,它与堆栈的顶部比较
  4. 如果他们不匹配 - 标记为问题 - 添加前缀
  5. 如果它们匹配 - 弹出堆栈的
  6. 当读完XML和有堆栈中的元素 - 添加前缀和关闭标签

这将解决简单的情况。 有一些边缘的情况下,像具有无与伦比的关闭标签合法标签内,也许更

+0

唯一的问题是没有XML解析器会成功处理格式不正确的XML。 –

+0

@MichaelKay - 你不需要xml解析器,你可以在字符串上运行,寻找打开/关闭标记 – Mzf

+0

好吧,我读“读取XML”为“将输入解析为XML”。关键是输入不是XML,我们正在寻找的东西不是(有效)标签;我们正在阅读一些近似于XML的内容,并寻找近似于打开和关闭标签的内容。 –

相关问题