【前端】XML,XPATH,与HTML的关系

  • XML与HTML关系
    XML(可扩展标记语言)和 HTML(超文本标记语言)是两种常见的标记语言,但它们有不同的目的和用途。它们都使用类似的标记结构(标签),但在设计上存在一些关键的差异。
    XML 是为了存储和传输数据而设计的标记语言。它不关注数据如何呈现,而是强调数据的结构化存储。XML 是 严格的,要求标签必须是成对的,所有的标签必须正确闭合。
    • 主要区别:
      目的不同:HTML 主要用于呈现数据,XML 主要用于存储和传输数据。
      严格性:HTML 容忍一些语法错误,XML 不容忍任何错误。
      灵活性:XML 可以定义自定义标签,而 HTML 使用固定的标签(如 < div>、< span>、< img> 等)。
  • XPATH
    XPath(XML Path Language)是一种用于在 XML 文档中查找信息的语言。它可以通过路径表达式选取 XML 文档中的元素或属性。在 XML 中,XPath 被广泛用于查询节点。
    尽管 HTML 和 XML 有些不同,但它们有许多相似之处。主要的相似之处是它们的结构都遵循树形结构,并且都使用标记(标签)来组织内容。因此,XPath 也能够解析 HTML 文档。
  • 为什么 XPath 能解析 HTML:
  1. HTML 也是 XML 的一种变体:
    虽然 HTML 语法上不完全符合 XML 的规范,但它的结构仍然遵循树形结构。元素可以有子元素、属性等,可以构成类似于 XML 的层级结构。
    现代浏览器的 HTML 解析器(如 DOM(文档对象模型))会将 HTML 转换为一个标准的 DOM 树,类似于 XML 文档的树形结构。XPath 就是通过该树形结构来定位和查询元素的。
  2. DOM 与 XPath 配合使用:
    当你使用 XPath 查询 HTML 时,实际上是通过 DOM API 来操作的。浏览器会解析 HTML 文档并将其转换为一个 DOM 树,XPath 语法可以用来在这个 DOM 树上进行查询。
    即使 HTML 存在一些不规范的部分(例如缺少结束标签),浏览器仍然能够通过容错机制生成一个合适的 DOM 树,XPath 可以在这个 DOM 树上进行查询。
  3. HTML 的标准化:
    即便 HTML 本身是宽松的,现代浏览器会对其进行宽容的解析,并生成符合 DOM 标准的树结构。即使 HTML 中的语法有问题,浏览器也会进行修复。因此,XPath 仍然可以在这个树状结构中进行查找。
  • XPath使用场景
    以下是一些会用到XPath的情况:
    一、网页数据提取 1. 爬虫开发 - 当编写网络爬虫从HTML页面提取特定信息时,XPath非常有用。例如,要从新闻网站提取文章标题、正文内容、发布时间等信息。如果HTML页面结构是使用类似<h1>标签表示标题,<p>标签表示正文,通过XPath可以精确地定位到这些元素。比如//h1可以找到页面中的所有一级标题元素,然后进一步筛选出包含新闻标题的那个元素。2. 数据挖掘与分析 - 在从网页中挖掘数据进行分析时,XPath能帮助定位到所需的数据块。例如分析电商网站上商品的价格、名称、评价数量等信息。假设商品价格在一个<span>标签内,且该<span>有特定的类名(如price - span),就可以使用XPath表达式(如//span[@class = 'price - span'])来定位到价格元素。
    二、自动化测试 1. UI自动化测试 - 在对网页或软件的用户界面进行自动化测试时,需要定位界面上的各种元素来执行操作(如点击按钮、输入文本等)。如果使用基于XPath的定位方式,可以准确地找到要操作的元素。例如在测试一个登录页面时,登录按钮可能在一个<button>标签内,且该<button>标签有特定的属性,通过XPath表达式就能定位到这个登录按钮元素,然后模拟点击操作。
    三、XML数据处理 1. 企业数据集成 - 在企业内部,不同系统之间可能使用XML格式进行数据交换。当需要从这些XML文档中查询、提取或转换特定数据时,XPath是一种有效的工具。例如,企业的财务系统和库存系统之间交换包含产品信息的XML文件,要从这个XML文件中获取特定产品的库存数量等信息,就可以使用XPath表达式在XML结构中定位到相应的元素。
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端