Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
XPath(XML 路径语言)提供了一种灵活的方法,可以使用非 XML 语法指向基于 XML 文档的不同部分。XPath 的名称源于路径表达式,它提供了一种分层寻址文档树中节点的方法。XPath 是一种查询语言,具有多种可能性。XPath 允许处理符合 DOM 数据模型的值;它以 HTML 文档的 DOM 表示法为基础,通过各种标准选择节点。XPath 表达式还可用于 C 和 C++、JavaScript、XML Schema、PHP、Python 以及许多其他语言。
XPath 主要用于使用 XPath 表达式浏览基于 XML 语言文档的 DOM。您可以在 HTML 和 SVG 中使用 XPath,而不是依赖 GetElement() 或 QuerySelectorAll() 方法和其他 DOM 函数。
本文介绍如何使用 Evaluate() 方法浏览 HTML 文档并通过 XPath 查询选择节点。您将学习如何使用 XPath 表达式从 HTML 文档中选择所有照片。
您可以从 GitHub 下载数据文件和完整的 C# 示例,这些示例演示了 XPath 查询中 Evaluate() 方法的使用。
XPath 查询主要使用
Document 类的
Evaluate() 方法。Evaluate(expression, contextNode, resolver, type, result) 方法接受一个 XPath 表达式和其他给定参数,并返回指定类型的结果。让我们来看看该方法的参数:
expression 是要评估的 XPath 的字符串表示形式。contextNode 指定了评估 XPath 表达式的上下文节点。通常将文档作为上下文节点。resolver 允许将 XPath 表达式中的所有前缀(包括 xml 命名空间前缀)转换为适当的命名空间 URI。type 与要返回的 XPathResult 结果类型相对应。如果指定了特定类型,则结果将以相应类型返回。result 是最常见的,它将创建一个新的 XPathResult。通常情况下,您希望保存来自不同服务的大量图像,例如某个相册中的照片。手动操作是可行的,但需要花费大量时间。因此,这既费时又低效,您可以使用 Aspose.HTML 库来自动完成这一过程。
在本例中,您将学习如何使用 Evaluate() 方法和 XPath 表达式查找网页上所有所需图片的链接。XPath 是一种功能强大的查询语言,可让您自由定制查询。让我们来看看 HTML 文档 xpath-image.htm。它包括包含广告图片的页眉和页脚,以及包含照片行和广告横幅的主元素。
让我们从一个直接的 XPath 查询开始,查询文档中的所有图像。下面使用了 XPath 表达式 //img。它会选择所有 img 元素,无论它们在文档中的哪个位置:
XPath Expression
1//imgC# code
1var result = doc.Evaluate("//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);JavaScript code
1var result = document.evaluate("//img", document, null, XPathResult.ANY_TYPE, null);此 XPath 查询将返回页眉和页脚的所有图像(照片、横幅)链接,以及照片行之间和照片行之间的链接。
首先,让我们去掉页眉和页脚中的横幅,有很多方法可以做到这一点,但在本例中,我们将通过父级元素设置过滤。XPath 查询//main//img会返回所有//main元素内嵌套的所有//img元素。这个结果已经更适合从文档中获取照片的请求,但仍包含额外的横幅。
XPath Expression
1//main//imgC# code
1var result = doc.Evaluate("//main//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);JavaScript code
1var result = document.evaluate("//main//img", document, null, XPathResult.ANY_TYPE, null);下一步,让我们清除 main 容器的偶数 /div 子元素中的横幅。通过 XPath 表达式,您可以选择所有其位置编号除以 2 后余数为奇数的 /div 子元素:
XPath Expression
1//main/div[position() mod 2 = 1]//imgC# code
1var result = doc.Evaluate("//main/div[position() mod 2 = 1]//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);JavaScript code
1var result = document.evaluate("//main/div[position() mod 2 = 1]//img", document, null, XPathResult.ANY_TYPE, null);因此,我们得到了一个包含照片和横幅广告链接的列表,这些链接位于所有奇特的 div 元素中,而这些元素都是 main 容器的子元素。
要清除照片中的横幅广告,XPath 表达式必须包含图像类名称,因为行中的所有照片都有相应的类 photo:
XPath Expression
1//main/div[position() mod 2 = 1]//img[@class = 'photo']C# code
1var result = doc.Evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);JavaScript code
1var result = document.evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", document, null, XPathResult.ANY_TYPE, null);结果,我们得到了一个只包含照片链接的列表。因此,唯一要做的就是下载它们。
让我们以 C# 为例,看看如何使用 Evaluate() 方法,使用 XPath 表达式从 HTML 文档中选择所有照片。您应遵循以下几个步骤
1// Use XPath to get only links to photos from HTML
2
3// Create an instance of an HTML document
4using (HTMLDocument doc = new HTMLDocument(Path.Combine(DataDir, "xpath-image.htm")))
5{
6 // Evaluate the XPath expression
7 IXPathResult result = doc.Evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);
8 // Iterate over the resulted nodes and print them to the console
9 Node node;
10 while ((node = result.IterateNext()) != null)
11 {
12 HTMLImageElement img = (HTMLImageElement)node;
13 Console.WriteLine(img.Src);
14 }
15}Aspose.HTML 提供免费的 HTML 网络应用程序,是转换器、合并器、搜索引擎优化工具、HTML 代码生成器、URL 工具等的在线集合。这些应用程序可在任何装有网络浏览器的操作系统上运行,无需安装任何其他软件。它是一种快速、简便的方法,能有效解决与 HTML 相关的任务。
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.