2010-10-19 40 views
1

我有這樣與TAG xml文件:C#XmlTextReader的:HTML實體更換

<Question>dzia&amp;#322;owa</Question> 

我閱讀使用XmlTextReader的這個文件,這個標籤我得到這樣的:

dzia&#322;owa 

如何替換我的xml中的html實體編號以獲得如下所示的內容:「działowa」?

+0

爲什麼你的標籤的內容被轉義了兩次?如果可能的話,解決問題。 – dtb 2010-10-19 11:28:41

+0

可能我必須通過名稱使實體名稱變成 - 之後 - 我將會有文本,如「dzia ł owa」,現在 - 如何將實體編號「&#322」更改爲有效文本「ł」? – UGEEN 2010-10-19 11:36:46

回答

1

您示例中唯一的HTML實體是&amp;。然後你得到了一些正常的文字,說#322;。要麼你想

<Question>dzia&amp;&#322;owa</Question> 

這將使 「dzia & LOWA」(可能不是你想要的)

<Question>dzia&#322;owa</Question> 

這將使 「działowa」

+0

&#322是char'ł'的實體號碼 我想獲得'działowa' – UGEEN 2010-10-19 11:30:34

+0

@UGEEN:是的,但在您的問題中,您*沒有*擁有此實體 - 某些東西已將正確的特殊字符編碼爲HTML實體編號,但是實體中的&符號(&)已被再次編碼。你不需要這種雙重編碼,你只需要'&#322',* not *'&#322'。 – 2010-10-19 12:41:57

+0

我需要先解碼&#322到&#322,然後解碼&#322到'ł'char。兩步解碼我認爲 - 我沒有看到更好的方法。 – UGEEN 2010-10-19 13:51:14

0

我想我解決了部分問題(編碼&#數字到字符):

public static string EntityNumbersToEntityValues(string s) 
     { 
      Match match = Regex.Match(s, @"&#(\d+);", RegexOptions.IgnoreCase); 
      while(match.Success) 
      { 
       string v = match.Groups[1].Value; 
       string c = char.ConvertFromUtf32(int.Parse(v)); 
       s = Regex.Replace(s, string.Format("&#{0};", v), c); 
       match = match.NextMatch(); 
      }   
      return s; 
     }