仅从节点文本中转义非法xml字符
本文关键字:非法 xml 字符 转义 节点 文本 | 更新日期: 2023-09-27 17:52:47
我正在使用一个API,由于一些疯狂的原因返回的XML有&没有正确转义的字符。这让我陷入了一个令人烦恼的境地。当我尝试使用XMLDocument
来解析xml字符串时,我会得到一个异常。
我可以使用replace来删除字符,但这可能会导致问题。
xml = xml.Replace("&", "&").Replace("&", "&");
这样做的问题是最终可能会有一些转义值。这样的节点会导致上面的代码行被搞砸。
<node>Something & something < annoying</node>
如果我替换&带有amp的字符;它会破坏它。我不能对它用同样的方法;就像我对amp所做的那样,这意味着它将转换我仍然需要转义的所有<>括号。
这是一个有问题的节点。
<CompanyName>Fire & Ice</CompanyName>
您可以使用类似的正则表达式来回答这个相关问题。这基本上匹配所有未转义的&号(即它将匹配&
,但不匹配&something;
)。
var xml = @"<node>Something & something < annoying</node>";
var result = Regex.Replace(xml, @"&(?!'w*;)", "&");
// output: <node>Something & something < annoying</node>
我向您推荐XElement。XElement是一个有用的对象。XElement. value将返回你想要的字符串。
using System.Xml.Linq;
XElement y = new XElement("CompanyNames",
new XElement("CompanyName", "Fire & Ice")
);
foreach (var item in y.Elements("CompanyName"))
{
Console.WriteLine(item.Value);
}
输出将是"Fire &冰"