【问题标题】:How to extract a text version of the HTML in an XML document?如何在 XML 文档中提取 HTML 的文本版本?
【发布时间】:2017-06-10 23:08:35
【问题描述】:

假设我有一个类似的 XML 文档(基本上代表一个 HTML 报告):

<html>
 <head>...</head>
 <body>
   <div>
   <table>
     <tr>
       <td>Stuff</td>
     </tr>
     <tr>
       <td>More stuff<br /><br />More stuff on another line and some whitespace...  </td>
     </tr>
     <tr>
       <td>  Some leading whitespace before this stuff<br />Stuff</td>
     </tr>
   </table>
   </div>
 </body>
</html>

我想(使用 C#)将此文档转换为类似于以下内容的简单文本字符串:

Stuff
More stuff

More stuff on another line and some whitespace...
  Some leading whitespace before this stuff
Stuff

它应该足够聪明,可以将表格行转换为新行,并在单元格中添加任何内联 br 标记的位置插入新行。它还应该保持表格单元格中的所有空格完好无损。我尝试使用 XmlDocument 类并在正文节点上使用 InnerText 方法,但它似乎没有创建我正在寻找的输出(换行符和空格不完整)。有没有一种简单的方法可以做到这一点?我知道这样做的一种方法是将 HTML 提取为一个字符串并在其上执行几个正则表达式来处理换行符和空格。谢谢!

【问题讨论】:

  • ML 是元语言(标记数据)。 XML 和 HTML 都是不同类型的元语言,因此您不能从 XML 转到 HTML。有时 XML 嵌入在 HTML 文档中,但在您的情况下,您只有没有 xml 的 html。

标签: c# xml


【解决方案1】:

请试试这个:

var doc = XElement.Load("test.xml");

var sb = new StringBuilder();

foreach (var text in doc.DescendantNodes().Where(node => node.NodeType == XmlNodeType.Text))
{
    sb.AppendLine(((XText)text).Value);
}

更简洁:

foreach (var text in doc.DescendantNodes().OfType<XText>())
{
    sb.AppendLine(text.ToString());
}

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 2012-07-02
    • 2011-10-07
    • 1970-01-01
    • 2013-05-07
    • 2021-10-22
    • 2021-08-08
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多