我正在使用API,并且由于一些疯狂的原因,返回的XML已经&未正确转义的字符。这让我陷入了烦人的境地。当我尝试使用XMLDocument
来解析xml字符串时,我收到异常。
我可以使用替换来摆脱角色,但这可能会导致问题。
xml = xml.Replace("&", "&").Replace("&", "&");
这个问题是最终可能会出现一些转义值。像这样的节点会导致上面的代码行被搞砸。
<node>Something & something < annoying</node>
如果我更换&amp;带放大器的字符;它会破坏LT;。我不能使用相同的方法LT;正如我为放大器所做的那样,这意味着它将转换所有的&lt;&gt;括号,我仍然需要逃脱。
这是一个给出麻烦的节点。
<CompanyName>Fire & Ice</CompanyName>
答案 0 :(得分:3)
您可以使用类似的正则表达式this related question。这非常匹配所有未转义的&符号(即它将匹配&
,但不匹配&something;
)。
var xml = @"<node>Something & something < annoying</node>";
var result = Regex.Replace(xml, @"&(?!\w*;)", "&");
// output: <node>Something & something < annoying</node>
答案 1 :(得分:-1)
我向你推荐XElement.XElement是有用的object.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&amp; Ice”