【发布时间】:2010-11-08 15:26:30
【问题描述】:
首先,我知道这是一个糟糕的解决方案,我不应该这样做。
背景:随意跳过
但是,我需要快速修复实时系统。我们目前有一个数据结构,它通过一系列字符串构建器创建“xml”片段,将自身序列化为字符串。这是否是有效的 XML 我相当怀疑。在创建这个 xml 之后,在通过消息队列发送它之前,一些清理代码会在字符串中搜索 xml 声明的出现并删除它们。
这样做的方式(迭代每个字符为<?xml 执行 indexOf)非常慢,导致线程超时并杀死我们的系统。最终我会尝试正确修复这个问题(使用 xml 文档或类似的东西构建 xml),但今天我需要一个快速修复来替换那里的内容。
请记住,我知道这远非理想的解决方案,但我需要快速修复以使我们恢复正常运行。
问题
我想使用正则表达式来查找声明。我打算:<\?xml.*?>,然后使用Regex.Replace(input, string.empty) 删除。
如果这个正则表达式有任何明显的问题,您能否告诉我,或者只是在代码中使用 string.IndexOf("<?xml") 和 string.IndexOf("?>") 对在(更明智的)循环中编写它更好。
编辑 我需要处理换行符。
会:<\?xml[^>]*?> 解决问题吗?
EDIT2
感谢您的帮助。正则表达式明智 <\?xml.*?\?> 工作正常。我最终编写了一些计时代码并使用 ar egex 和 IndexOf() 进行了测试。我发现,对于我们最简单的用例,只需声明剥离即可:
- 几乎一秒钟
- .01 秒的正则表达式
- 无法使用循环和
IndexOf()
所以我选择了IndexOf(),因为它是一个非常简单的循环。
【问题讨论】:
-
首先检查它是否实际上是有效的 XML - 如果是这样,那么会有更好且仍然有效的答案。是否有过 XSD 的尝试?
-
@annakata:没有 XDS,这一切都只是手写/拼凑在一起,或者看起来是这样。我怀疑如果尝试解析它会发生的第一件事是由于多个 xml 声明而失败。最终,我的计划是让每个类将自身序列化为 VIA 一个 XmlDoc 或等效字符串,以获取有效的 XML。
-
它可能会失败,但第一步是检查,第二件事是仔细检查诸如 beautifulsoup 之类的东西不会拯救你。