我正在尝试使用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()
来获取控件的所有值(在我们的示例中为p和span)。但这只是获得跨越的文本。
我如何获得这两个标准的值 - “p”和“span”。
更新: 我正在尝试开发一个多语言应用程序,其中资源文件和密钥是通过代码生成的。在上面的示例中:我需要创建3个键:1-“p Tag中的某些文本”,2-“span标记中的某些文本”。和3-“再一些p标签中的文字。”我该如何创建这些键。 当前场景是,它为span标签创建密钥而不是p标签。
提前致谢
答案 0 :(得分: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);
}
如果以上样本均不适用于您的案例,请更新问题以进一步澄清您尝试解决的实际问题。