HtmlAgilityPack Windows Phone 8.1 在 htmlDocument 中查找节点
HtmlAgilityPack Windows Phone 8.1 Find node in htmlDocument
我正在构建一个 Windows 8.1 Phone 应用程序,它需要从网页访问元素。我需要访问的元素在页面内部相当深,所以我需要找到一种简单的方法来访问这些元素而不使用 XPATH(因为据我所知,Windows Phone 8.1 不支持 XPATH)。
就从网页加载文档而言,下面的方法是我用来获取页面(工作正常)的方法。举一个我需要访问的 HTML 元素的例子,请考虑以下例子:
<html>
<head>..</head>
<body>
<form>
<div class="1"></div>
<div class="2">
<p>The text I wish to access</p>
</div>
<div class="3"></div>
</form>
<p>...</p>
</body>
</html>
以及我需要访问文本的方法
private async Task GetHtmlDocument(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Credentials = new LoginCredentials().Credentials;
try
{
WebResponse myResponse = await request.GetResponseAsync();
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.Load(myResponse.GetResponseStream());
var body = htmlDoc.DocumentNode.Descendants("body").First();
var form = body.Descendants("form").First();
}
catch (...){ ... }
}
编辑: 忘了提到 Descendants("form")
没有返回任何有用的东西(即使 body.InnerHTML
包含一个表单元素)。
以下代码打印所有 HTML 代码,可以通过检查浏览器中的 Body 元素找到 "body",但 "form" InnerHtml
是空 ("") 且该元素没有子元素。
HtmlNode body = htmlDoc.DocumentNode
.Descendants("body")
.FirstOrDefault();
HtmlNode form = htmlDoc.DocumentNode
.Descendants("body")
.FirstOrDefault()
.Descendants("form")
.FirstOrDefault();
Debug.WriteLine(body.InnerHtml);
Debug.WriteLine(form.InnerHtml);
我认为 this 会对您有所帮助。显然您需要从标记的元素列表中删除。
我正在构建一个 Windows 8.1 Phone 应用程序,它需要从网页访问元素。我需要访问的元素在页面内部相当深,所以我需要找到一种简单的方法来访问这些元素而不使用 XPATH(因为据我所知,Windows Phone 8.1 不支持 XPATH)。
就从网页加载文档而言,下面的方法是我用来获取页面(工作正常)的方法。举一个我需要访问的 HTML 元素的例子,请考虑以下例子:
<html>
<head>..</head>
<body>
<form>
<div class="1"></div>
<div class="2">
<p>The text I wish to access</p>
</div>
<div class="3"></div>
</form>
<p>...</p>
</body>
</html>
以及我需要访问文本的方法
private async Task GetHtmlDocument(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Credentials = new LoginCredentials().Credentials;
try
{
WebResponse myResponse = await request.GetResponseAsync();
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.Load(myResponse.GetResponseStream());
var body = htmlDoc.DocumentNode.Descendants("body").First();
var form = body.Descendants("form").First();
}
catch (...){ ... }
}
编辑: 忘了提到 Descendants("form")
没有返回任何有用的东西(即使 body.InnerHTML
包含一个表单元素)。
以下代码打印所有 HTML 代码,可以通过检查浏览器中的 Body 元素找到 "body",但 "form" InnerHtml
是空 ("") 且该元素没有子元素。
HtmlNode body = htmlDoc.DocumentNode
.Descendants("body")
.FirstOrDefault();
HtmlNode form = htmlDoc.DocumentNode
.Descendants("body")
.FirstOrDefault()
.Descendants("form")
.FirstOrDefault();
Debug.WriteLine(body.InnerHtml);
Debug.WriteLine(form.InnerHtml);
我认为 this 会对您有所帮助。显然您需要从标记的元素列表中删除。