2011-07-20 253 views
25

我有一个包含XML描述的字符串(来自CDATA元素)。我需要把这个字符串解码成显示正确使用C#如何将字符串解码为C#中的XML字符串

现有的字符串中的字符一个新的字符串:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><myreport xmlns="http://test.com/rules/client"><admin><ordernumber>123</ordernumber><state>NY</state></report></myreport> 

字符串通缉:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<myreport xmlns="http://test.com/rules/client"> 
<admin><ordernumber>123</ordernumber><state>NY</state></report></myreport> 
+0

但你现有的字符串*无效* – naveen

+0

@naveen:当然,这只是字符串的_contents_ ... –

+0

@Jeff Mercado:当我看到字符串无效并且HtmlDecode赢得了使用linqpad写回答因为它接受'字符串'而不工作。很显然,我们的OP也需要转义'“' – naveen

回答

5

由于基里尔msarchet说,你可以使用HttpUtility.HtmlDecodeSystem.Web。它几乎可以正确地逃脱任何事情。

如果你不想引用System.Web你可能会使用一些它支持所有的XML转义而不是逃避像&eacute;特定HTML的:

public static string XmlDecode(string value) { 
    var xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml("<root>" + value + "</root>"); 
    return xmlDoc.InnerText; 
} 

您还可以使用正则表达式简单string.Replace但它只会支持基本的XML转义。像&#x410;&eacute;这样的东西很难支持。

+0

我不会用RegEx解析XML/HTML:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags/ – cederlof

+0

(我喜欢XmlDocument方法虽然)+1 – cederlof

-1

您也可以考虑从XDocument开始的静态分析方法。我不确定它与这里提到的其他人相比如何,但似乎很好地解析了这些字符串。

一旦你获得了导致的XDocument,你可以把周围的ToString获取字符串返回:

string parsedString = XDocument.Parse("<My XML />").ToString(); 
1

您可以使用HTML.Raw。这样标记就不会被编码。

+0

你能提供一些示例代码来更好地解释你的答案吗? – winhowes

0

你只需要用他们的原件替换扫描字符。

string stringWanted= existingString.Replace("&lt;", "<") 
                .Replace("&amp;", "&") 
                .Replace("&gt;", ">") 
                .Replace("&quot;", "\"") 
                .Replace("&apos;", "'"); 
+0

那么这很奇怪。我只是[制作了一个示例](https://dotnetfiddle.net/vRfBTE),我期待展示这个问题,并且它可以按照需要正确地工作。奇怪的是我*知道*这种确切的情况是导致代码库中的XML解析错误的原因,我认为我昨天修复了*。至少,我认为这完全一样。我会取消downvote并删除我原来的评论,直到我有机会检查。 –

0

它的WebUtility.HtmlDecode现在来自System.Net。

相关问题