使用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合法吗? 是的,了解原因