如何在XML文档中提取HTML的文本版本?

时间:2017-06-10 14:38:59

标签: c# xml

假设我有一个类似的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类并在body节点上使用InnerText方法,但它似乎没有创建我正在寻找的输出(换行符和空格不完整)。有一个简单的方法吗?我知道一种方法是将HTML作为一个字符串提取并在其上执行几个正则表达式来处理换行符和空格。谢谢!

1 个答案:

答案 0 :(得分:0)

请试试这个:

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