2017-06-10 33 views
0

假設我有一個看起來像一個XML文檔(基本上可以代表一個HTML報告):如何在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提取爲一個字符串,並對其執行幾個正則表達式來處理新行和空白。謝謝!

+0

這不會幫助嗎? https://stackoverflow.com/questions/731649/how-can-i-convert-html-to-text-in-c – hardkoded

+0

ML是元語言(標記數據)。 XML和HTML都是不同的元語言類型,因此您無法從XML轉換爲HTML。有時XML會嵌入到HTML文檔中,但在您的情況下,您只需使用不帶xml的html。 – jdweng

回答

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