【问题标题】:C# XmlTextReader: html entity replaceC# XmlTextReader:html 实体替换
【发布时间】:2011-04-27 10:29:12
【问题描述】:

我有这样 TAG 的 xml 文件:

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

我正在使用 XmlTextReader 读取此文件,对于此 TAG,我得到如下内容:

dzia&#322;owa

如何在我的 xml 中替换 html 实体编号以获得类似这样的内容:“działowa”?

【问题讨论】:

  • 为什么你的标签内容被转义了两次?如果可能,请解决问题。
  • 可能我必须按名称对实体进行转义 - 之后 - 我将有像“działowa”这样的文本,现在 - 如何更改实体编号“ł”到有效的文本'ł'?

标签: c# html xml xmltextreader


【解决方案1】:

您的示例中唯一的 HTML 实体是 &amp;amp;。然后你会得到一些普通的文字,上面写着#322;。你要么想要

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

这会给出“dzia&łowa”(可能不是你想要的)

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

这将给出“działowa”

【讨论】:

  • ł 是 char 'ł' 的实体编号我想得到 'działowa'
  • @UGEEN:是的,但是在您的问题中,您 没有 有这个实体 - 某些东西已将特殊字符正确编码为 HTML 实体编号,但随后是 & 符号 ( &) 在实体中已被再次编码。你不需要这种双重编码,你只需要&amp;amp;#322not &amp;amp;#322
  • 我需要先将 &#322 解码为 ł,然后将 ł 解码为 'ł' 字符。我认为两步解码 - 我没有看到更好的方法。
【解决方案2】:

我想我解决了部分问题(将 number; 编码为 char):

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;
        }

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 2011-01-22
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2011-03-29
    相关资源
    最近更新 更多