在 XML 中删除流氓符号的最佳方法是什么?
What is the best way of removing rogue ampersands in XML?
(底部的 TLDR)
我们有一个遗留系统已经实现了它自己的 XML reader/writer。问题是它允许在 属性 值内使用文字“&”。
<SB nae="Name" net="HV & DD"/>
当我使用 XDocument.Parse() 方法读取数据时,这当然会失败。我正在寻找清理数据的方法。
我正在尝试使用正则表达式来识别发生这种情况的情况。
为了说明这一点,考虑一下:
&(?!amp\;)
这将识别带有负前瞻性的符号,以确保它实际上不是正确转义的符号。当我确定这些情况后,我可以用适当的 &
代替
当然,这会匹配其他转义字符,如 > < " 等,所以我也需要取消匹配。也许使用更通用的形式,例如正则表达式不匹配的符号,后跟 2-4 个字符,然后是分号。
但我担心的是,还有其他一些我没有想到的和号的情况,并且在我得到的几个样本中也没有出现。我正在寻找一种不会弄乱正确 xml.
的安全方法
TLDR:如何识别不属于正确 xml 的 & 符号,但在 属性 值中是未转义 & 符号的情况?
您可以将以下正则表达式模式替换为 &
:
&(?!(?:#\d+|#x[0-9a-f]+|\w+);)
(底部的 TLDR)
我们有一个遗留系统已经实现了它自己的 XML reader/writer。问题是它允许在 属性 值内使用文字“&”。
<SB nae="Name" net="HV & DD"/>
当我使用 XDocument.Parse() 方法读取数据时,这当然会失败。我正在寻找清理数据的方法。
我正在尝试使用正则表达式来识别发生这种情况的情况。 为了说明这一点,考虑一下:
&(?!amp\;)
这将识别带有负前瞻性的符号,以确保它实际上不是正确转义的符号。当我确定这些情况后,我可以用适当的 &
代替当然,这会匹配其他转义字符,如 > < " 等,所以我也需要取消匹配。也许使用更通用的形式,例如正则表达式不匹配的符号,后跟 2-4 个字符,然后是分号。
但我担心的是,还有其他一些我没有想到的和号的情况,并且在我得到的几个样本中也没有出现。我正在寻找一种不会弄乱正确 xml.
的安全方法TLDR:如何识别不属于正确 xml 的 & 符号,但在 属性 值中是未转义 & 符号的情况?
您可以将以下正则表达式模式替换为 &
:
&(?!(?:#\d+|#x[0-9a-f]+|\w+);)