使用HTML Agility Pack解析父級和後代標記

asp.net html html-agility-pack

我正在嘗試使用HTML Agility Pack解析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>

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

我怎樣才能得到tage的值 - “p”和“span”。

更新:我正在嘗試開發一個多語言應用程序,其中資源文件和密鑰是通過代碼生成的。在上面的示例中:我需要創建3個鍵:1-“p Tag中的某些文本”,2-“span標記中的某些文本”。和3-“再一些p標籤中的文字。”我該如何創建這些鍵。當前場景是,它為span標籤創建密鑰而不是p標籤。

提前致謝

熱門答案

實際上問題不是很清楚。您應該發布更多相關代碼,說明您是如何嘗試獲取<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);
}

如果以上樣本均不適用於您的案例,請更新問題以進一步澄清您嘗試解決的實際問題。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因