如何使用 &nbsp 元素将我的字符串解析为 XML?

Posted

技术标签:

【中文标题】如何使用 &nbsp 元素将我的字符串解析为 XML?【英文标题】:How to parse my string to XML with &nbsp elements? 【发布时间】: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,我会丢失所有这些元素并获得“”字段。

【问题讨论】:

【参考方案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;。我想你会同意我的观点,它不应该存在。

以上是关于如何使用 &nbsp 元素将我的字符串解析为 XML?的主要内容,如果未能解决你的问题,请参考以下文章

Jsoup在极少数情况下无法解析元素

如何在 Java 中解析 HTML 字符串?

将 int 添加到数组中

如何将我的云代码部署到 AWS Elastic Beanstalk? (解析服务器)

xml元素类型PCDATA和CDATA的区别(DTD中)

Rails:如何将日期时间字符串解析为特定时区