0

我正在使用缓冲区流式传输 xml 文档。我将缓冲区设置得很低(50)以保持良好的性能。然后我使用缓冲字符串尝试从 xml 中提取根元素名称(在这种情况下,我需要下面的 xml 中的“abc”):

<?xml version="1.0"?>
<!--foobar-->
<!--<foo:bar></foo:bar>-->
<foo:abc xmlns:foo="url"><a><b>...

我应该只得到名字本身,没有别名。此外,应忽略注释中的处理指令和 xml 标签。当没有匹配时,我会让缓冲区变大并再次尝试匹配,直到找到根元素。

我创建了一个正则表达式,它正是这样做的,并返回根元素名称。使用 $4 的替换功能。但是,当正则表达式不匹配任何内容时,它会挂起很长时间来尝试解析模式......

(?s)(.*?(<!--.*?-->)?.*?)*<(.*?:)?([^!\?].*?)((\s+|/).*)?>.*

问题似乎出在试图匹配评论的部分

(.*?(<!--.*?-->)?.*?)*

但我无法弄清楚如何优化它,而不破坏它......有什么想法吗?

4

0 回答 0