C# XDoc 解析 XML 字符串

18 浏览
0 Comments

C# XDoc 解析 XML 字符串

我通过一个XML API接收数据,返回的节点如下:



  ØL商店

我无法控制响应,但我尝试将其加载到一个XDocument中,但由于无效字符而失败。

有没有办法让它正确加载?我希望解决方案尽可能通用,因为可能存在其他无效字符。

有什么想法吗?

0
0 Comments

在使用C#解析XML字符串时,可能会遇到无效的XML字符导致解析失败的情况。为了解决这个问题,可以在将响应加载到XDocument之前对无效的XML字符进行转义处理。可以使用正则表达式来实现这个功能,非常简单。

具体的解决方法可以参考以下链接中的内容:

escape invalid XML characters in C#

根据这个链接中的讨论,可以使用以下代码来转义无效的XML字符:

string xmlString = "...";
string pattern = @"[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]";
string escapedXmlString = Regex.Replace(xmlString, pattern, "");

通过这种方式,就可以解决在解析XML字符串时可能出现的无效XML字符导致解析失败的问题。

0
0 Comments

C# XDoc Parse XML string问题的出现原因是在解析XML字符串时,可能会遇到无效的输入,导致解析失败。解决方法是使用更宽容的HTML解析器,例如HtmlAgilityPack,可以正常工作。

HtmlAgilityPack是一个C#的开源库,用于解析HTML文档。通过使用HtmlAgilityPack,可以将XML字符串加载到HtmlDocument对象中,然后使用LINQ语法查询需要的数据。

下面是使用HtmlAgilityPack解析XML字符串的示例代码:

var doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(xml);

var name = doc.DocumentNode.Descendants("name").First().InnerText;

在上面的代码中,首先创建一个HtmlDocument对象,并使用LoadHtml方法将XML字符串加载到该对象中。然后,使用Descendants方法查询所有名称为"name"的元素,并通过LINQ语法获取第一个元素的InnerText属性值,即元素的文本内容。

通过使用HtmlAgilityPack,我们可以更容易地解析XML字符串,即使在遇到无效输入时也能正常工作。这提供了一种简单而有效的解决方案,可以在C#中解析XML字符串。

0
0 Comments

问题的出现原因是在使用XDocument.Parse解析XML字符串时,不能直接使用"&"符号,因为在XML中"&"是一个特殊字符,需要进行转义处理。解决方法是将"&"替换为"&"。

具体代码如下:

string xmlString = "ØL Shop";
XDocument doc = XDocument.Parse(xmlString);

上述代码中,将"&"替换为"&",然后再进行解析,就可以正确地解析XML字符串了。

然而,这可能不是我们期望的结果。我们期望的结果应该是ØL Shop,其中216是字符"Ø"的十进制Unicode值,经过HTML编码后为"Ø"。

需要注意的是,"&"在XML规范中仍然是一个未知的实体。因此,在实际应用中,我们应该使用正确的实体或字符来表示特殊字符,而不是依赖于替换转义符。

0