【问题标题】:process < br/> in C#在C#中处理<br/>
【发布时间】:2014-05-15 15:56:17
【问题描述】:

在 C# 中处理 xml 时,我试图在输出中包含空格。这就是我所拥有的

text = text.Replace("&lt;br /&gt;", " ");
text = HttpUtility.HtmlDecode(text);
System.Xml.XmlDocument doc = new XmlDocument();
doc.LoadXml(text);
StringBuilder sb = new StringBuilder();
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
          sb.Append(' ');
           sb.AppendLine(node.InnerText);
}
<root><Paragraph>
<![CDATA[       Electrical Technologies]]>&lt;br /&gt;<![CDATA[Thomas Edison]]> </Paragraph></root>

我希望输出为Electrical TechnologiesSPACEThomas Edison,但输出为Electrical TechnologiesThomas Edison

任何建议。

谢谢 回复

【问题讨论】:

  • 您可能会觉得这很有趣:github.com/jamietre/CsQuery。我觉得用起来更方便。还有Selecting "div span" from the HTML5 spec (a 6 megabyte HTML file) is about 500 hundred times faster than HtmlAgilityPack

标签: c# xml html-agility-pack


【解决方案1】:

由于HtmlDecode&amp;lt;&amp;gt; 转换为&lt;&gt;,您可以尝试替换为HTML 空格字符&amp;nbsp;。即

text = text.Replace("&lt;br /&gt;", "&nbsp;");
                                     ^

【讨论】:

    【解决方案2】:

    我建议使用 Linq to Xml 来解析 xml。以下是提取 CDATA 值的方法:

    var xdoc = XDocument.Load(path_to_xml);
    var values = xdoc.Root.Element("Paragraph").Nodes()
                     .OfType<XCData>()
                     .Select(x => x.Value.Trim());
    

    如果要获取此xml文件中所有CDATA节点的值:

    var values = xdoc.DescendantNodes().OfType<XCData>().Select(x => x.Value.Trim());
    

    此查询返回两项:

    [ "Electrical Technologies", "Thomas Edison" ]
    

    您可以根据需要格式化输出。例如。在一个字符串中用空格连接值:

    var result = String.Join(" ", values);
    

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2011-01-26
      • 2012-03-08
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多