2013-04-22 118 views
2

我通过XML API接收数据和它的返回像节点以下:C#XDOC解析XML字符串

<?xml version='1.0' encoding='utf-8' ?> 

<location> 
    <name>&Oslash;L Shop</name> 
</location> 

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

有什么我可以做的,使这个负载正确?我想尽可能保持解决方案的一般性,因为可能存在其他无效字符。

想法?

+2

老实说,你应该查询xml文件的生产者来生成一个有效的xml文件。您可以成功修补输入,但这是不可行的解决方案。 – 2013-04-22 14:06:24

+0

我同意。所使用的编码仅在HTML中有效,而不在XML文件中。这个字符应该被编码为,例如'Ø'。 – 2013-04-22 14:11:37

+0

@SteveB我同意这里的* real *解决方案是为了得到固定的答案。但是,我不会说它不是一个可行的解决方案。在处理之前,从响应中取消任何无效字符非常容易。在未来,**如果第三方确实解决了问题,它就会变成一个完整的检查。在技​​术上,这也是未来的证明,因为他们也可以重新介绍那些检查将会发现的问题。 – James 2013-04-22 14:11:55

回答

1

您可以使用HTML解析器这是更宽容的无效投入。例如; (使用HtmlAgilityPack)这段代码没有任何问题。

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(xml); 
var name = doc.DocumentNode.Descendants("name").First().InnerText; 
1

你不能使用XDocument.Parse输入文本 “&” 的象征。将其替换为“& amp;” ,像这样

<?xml version='1.0' encoding='utf-8' ?> 

<location> 
    <name>&amp;Oslash;L Shop</name> 
</location> 
+0

这可能不是正确的结果。我希望它应该是' Ø L商店'(216是'Ø'的十进制Unicode值,这个HTML编码是'&Oslash;') – 2013-04-22 14:16:11

+0

'&'仍然是XML中未知的实体规范 – 2013-04-22 14:45:09