【发布时间】:2019-03-27 19:09:54
【问题描述】:
(TLDR 在底部)
我们有一个实现了自己的 XML 读取器/写入器的遗留系统。问题是它允许在属性值中使用文字“&”。
<SB nae="Name" net="HV & DD"/>
当我使用 XDocument.Parse() 方法读取数据时,这当然会失败。我正在研究清理数据的方法。
我正在尝试使用正则表达式来识别发生这种情况的情况。 为了说明,考虑一下:
&(?!amp\;)
这将识别带有负前瞻的 & 符号,以确保它实际上不是正确转义的 & 符号。当我确定了这些情况后,我可以用适当的 & 替换
当然,有一个问题是这会匹配其他转义字符,例如 > < " 等,所以我也需要取消匹配这些字符。也许使用更通用的形式,例如正则表达式不匹配的 & 符号后跟 2-4 个字符,然后是分号。
但我担心的是,还有其他一些我没有想到的和符号的情况,并且在我得到的少数样本中没有体现出来。我正在寻找一种不会弄乱正确 xml 的安全方法。
TLDR:如何识别不属于正确 xml 的 & 符号,但是否是属性值中未转义的 & 符号?
【问题讨论】:
-
您能否提供更多实际 xml 示例以及每个示例的预期/期望匹配项?
-
“遗产”有多少遗产?如果可能的话,我会修复源而不是修复产品。
标签: c# regex xml linq-to-xml