2014-04-02 123 views
0

我試圖用HTML敏捷包解析HTML表單。它工作正常以下代碼: <p>Some Text</p> 但是假設我有這樣的: <p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>使用HTML敏捷包解析父代和後代標記

我使用HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants(controlName).ToArray()得到控制的所有值(在本例中p和跨度)。但是這只是獲取跨越文本。

我該如何獲得tage的值 - 「p」以及「span」。

更新: 我想開發一個多語言應用程序,其中資源文件和密鑰是通過代碼生成的。在上面的例子中:我需要創建3個鍵:1-「p標籤中的某些文本」,2-「跨度標籤中的某些文本。」和3-「再次在p標籤中的一些文本。」我如何創建這些密鑰。 當前場景是,它爲span標籤創建密鑰,而不是爲p標籤創建密鑰。

提前致謝

回答

2

其實問題不是很清楚。您應該發佈更多相關代碼,說明您如何試圖獲得<p><span>的價值。

這一個工作就好拿到兩個<p><span>文字:

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>"; 
var htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(html); 
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray()) 
{ 
    Console.WriteLine(nodeItem.InnerText); 
} 
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray()) 
{ 
    Console.WriteLine(nodeItem.InnerText); 
} 

同樣的輸出通過這個單一foreach循環產生:

foreach (HtmlNode nodeItem in 
       htmlDoc.DocumentNode 
         .SelectNodes("//*[name() = 'p' or name() = 'span']")) 
{ 
    Console.WriteLine(nodeItem.InnerText); 
} 

或者,如果你真的不關心關於標籤名稱,您可以獲得全部元素如下:

foreach (HtmlNode nodeItem in 
       htmlDoc.DocumentNode 
         .SelectNodes("//*")) 
{ 
    Console.WriteLine(nodeItem.InnerText); 
} 

如果上述示例都不適用於您的情況,請更新問題以進一步闡明您嘗試解決的實際問題。