2011-07-20 72 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。

相關問題