【问题标题】:How to parse my string to XML with &nbsp elements?如何使用 &nbsp 元素将我的字符串解析为 XML?
【发布时间】:2014-03-17 17:43:07
【问题描述】:

我有字符串 s,它看起来:

<root><p>hello world</p>&nbsp;my name is!</root>

我有下一个代码:

try
{
    m_Content = XDocument.Load(new StringReader(s));
}
catch (XmlException ex)
{
    ex.Data["myerror"] = s;

    throw;
}

如您所见,我想加载带有 &amp;nbsp; 等所有元素的字符串并使其可见。但我有 XmlException:

对“nbsp”的未声明替换的引用

任何想法如何正确地做到这一点?

添加

ChrisShao 提供了一个好主意:将我的字符串放在&lt;![CDATA[ 标记中,但不幸的是它并没有解决我的问题。我有一个大字符串,其中包含很多标签和很少的大文本,我可以在其中遇到&amp;nbsp; 元素。如果使用System.Web.HttpUtility.HtmlDecode,我会丢失所有这些元素并获得“”字段。

【问题讨论】:

    标签: c# xml-parsing linq-to-xml


    【解决方案1】:

    回应您的添加部分。您获得的空白 (" ") 字段是 &amp;amp;nbsp; 在呈现时的正确表示。用于 xml 的 &amp;amp;nbsp; 的正确编码是 &amp;#160; [Reference]。

    如果您真的想在字符串加载到XDocument 时看到&amp;amp;nbsp; 而不是" ",请尝试使用&amp;amp; 对与字符(&amp;)进行编码。将&amp;amp;nbsp; 替换为&amp;amp;nbsp; [Reference]。

    【讨论】:

      【解决方案2】:

      使用 System.Web.HttpUtility.HtmlDecode 或 System.Net.WebUtility.HtmlDecode

      【讨论】:

        【解决方案3】:

        我认为你应该把你的字符串放到 CDATA 块中,像这样:

        <root><![CDATA[<p>hello world</p>&nbsp;my name is!]]></root>
        

        【讨论】:

        • 但是,如果我的字符串包含大量标签和大量文本,我可以遇到&amp;nbsp; 元素,我该怎么办?
        • 那是怎么回事?在 CDATA 中无法正确解析?
        • 是的!我把&lt;![CDATA[放在字符串的开头,]]&gt;放在最后。当我查看页面时,我在显示的元素末尾看到]]&gt;。我想你会同意我的观点,它不应该存在。
        猜你喜欢
        • 1970-01-01
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 2017-04-28
        相关资源
        最近更新 更多