首页 > 其他分享 >XPath用于在XML和HTML文档中提取和操作数据

XPath用于在XML和HTML文档中提取和操作数据

时间:2024-12-18 16:10:18浏览次数:5  
标签:XPath XML 元素 选取 HTML 文档 节点

一、概述

XPath(XML Path Language)是一门在XML文档中查找信息的语言,它也可用于HTML文档,因为HTML可以看作是XML的一种特殊形式。XPath通过路径表达式来选取XML/HTML文档中的节点或者节点集。

二、节点类型

在XPath中,有多种节点类型,主要包括以下几种:

  • 元素节点:这是最常见的节点类型,例如在HTML中,<div><p>等标签对应的就是元素节点。例如在<div class="container">这个代码片段中,<div>就是一个元素节点。
  • 属性节点:是元素节点的属性,比如对于<a href="https://example.com">href及其值https://example.com构成一个属性节点,它属于<a>这个元素节点。
  • 文本节点:元素节点中的文本内容。如<p>这是一段文本</p>,“这是一段文本”就是一个文本节点。

三、基本语法

  1. 选取节点
    • 绝对路径:从根节点开始选取,路径以斜杠/开头。例如,在一个XML文档中,如果根节点是<bookstore>,要选取所有的<book>元素,XPath表达式可以是/bookstore/book。在HTML文档中,根节点是<html>,如果要选取<body>下的所有<div>元素,表达式可以是/html/body/div
    • 相对路径:不从根节点开始,而是从当前节点开始选取。例如,如果当前节点是<section>,要选取它内部的所有<p>元素,可以使用p这个相对路径表达式。
  2. 通配符
    • *:可以匹配任何元素节点。例如/bookstore/*会选取bookstore根节点下的所有子元素。
    • @*:可以匹配任何属性节点。例如//*[@*]会选取文档中带有任何属性的所有元素。
  3. 轴(Axes)
    • 子元素轴(child):默认情况下,XPath路径表达式选取的是子元素。例如/bookstore/book中的bookbookstore的子元素。
    • 后代元素轴(descendant):使用//表示。例如//book会选取文档中所有的book元素,无论它们在文档结构中的层次有多深。
    • 父元素轴(parent):可以用来选取当前节点的父节点。例如,如果当前节点是<p>,表达式parent::*会选取<p>的父元素。
    • 祖先元素轴(ancestor):可以选取当前节点的所有祖先节点。例如ancestor::div会选取当前节点的所有<div>类型的祖先节点。

四、在编程语言中的应用

  1. Python
    • 在Python中,可以使用lxml库来解析XML/HTML并使用XPath。首先需要安装lxml库,然后可以这样使用:
    from lxml import etree
    
    # 解析XML或HTML文档
    tree = etree.parse('example.xml')
    # 使用XPath表达式选取节点
    elements = tree.xpath('/bookstore/book')
    for element in elements:
        print(element.text)
    
  2. Java
    • 在Java中,可以使用JAXP(Java API for XML Processing)结合XPath来处理。例如:
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    
    public class XPathExample {
        public static void main(String[] args) throws Exception {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("example.xml");
    
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            NodeList nodeList = (NodeList) xpath.evaluate("/bookstore/book", document, XPathConstants.NODESET);
            for (int i = 0; i < nodeList.getLength(); i++) {
                System.out.println(nodeList.item(i).getTextContent());
            }
        }
    }
    

标签:XPath,XML,元素,选取,HTML,文档,节点
From: https://www.cnblogs.com/java-note/p/18615199

相关文章

  • 【bWAPP】XML&XPath Injection实战
    人生最大的悲剧就是:你配不上自己的野心,也辜负了所受的苦难前言XML注入XXE-“xmlexternalentityinjection”,即“xml外部实体注入漏洞”。概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收......
  • C# 读取xml文档并传值给公共类属性
    Publicfilepublicfile=newPublicfile();try{stringfilePath=Path.Combine("C:?",fileName);if(!File.Exists(filePath)){WriteErrorLog(......
  • 前端必知必会-JavaScript HTML DOM 导航
    文章目录JavaScriptHTMLDOM导航DOM节点DOMHTML树节点关系节点树在节点之间导航子节点和节点值InnerHTMLDOM根节点document.body-文档的正文nodeName属性nodeName是只读的nodeValue属性nodeType属性总结JavaScriptHTMLDOM导航使用HTMLDOM,您可以使......
  • 前端必知必会-JavaScript HTML DOM 元素(节点)
    文章目录JavaScriptHTMLDOM元素(节点)添加和删除节点(HTML元素)创建新的HTML元素(节点)创建新的HTML元素-insertBefore()删除现有HTML元素删除子节点替换HTML元素总结JavaScriptHTMLDOM元素(节点)添加和删除节点(HTML元素)创建新的HTML元素(节点)要向HT......
  • 前端必知必会-JavaScript HTML DOM 集合
    文章目录JavaScriptHTMLDOM集合HTMLCollection对象HTMLHTMLCollection长度总结JavaScriptHTMLDOM集合HTMLCollection对象getElementsByTagName()方法返回HTMLCollection对象。HTMLCollection对象是HTML元素的数组式列表(集合)。以下代码选择文档......
  • 如果不写标准的html标签,浏览器可以正常解析出来吗?
    当HTML文档不包含标准的HTML标签时,浏览器的解析行为可能会受到影响,但并不一定意味着浏览器无法解析或显示内容。以下是对这一问题的详细分析:浏览器的容错机制:现代浏览器都具备强大的容错和错误修复能力。即使HTML代码中缺少某些标签或格式不正确,浏览器也会尝试修复这些错误,并尽......
  • 请说出几条关于HTML的W3C标准规范
    关于HTML的W3C标准规范,以下是一些重要的点:文档类型声明(DOCTYPE):DOCTYPE用于说明HTML的版本,是必不可少的关键组成部分。它告诉浏览器该文档使用哪种HTML或者XHTML规范来解析页面。例如,HTML5的DOCTYPE声明为<!DOCTYPEhtml>。字符编码:为了被浏览器正确解释和通过W3C代码......
  • 360.大学生HTML5期末大作业 —【漫威电影网站(页)】 Web前端网页制作 html5+css3+js
    目录一、网页简介二、网页文件三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强欢迎来到我的CSDN主页!您的支持是我创作的动力!Web前端网页制作、网页完整代码、大学生期末大作业案例模板完整代码、技术交......
  • HTML打包EXE中的WebView2(免费)与Chrome内核的区别和使用场景详细介绍
    背景 近期有不少朋友使用了HTML一键打包EXE工具中的Webview2(免费)内核,询问的比较多的就是Webview2和Chrome内核的区别,这里会给大家做一个简单的介绍.WebView2是由微软提供的一种控件,它允许开发人员在本机应用程序中嵌入web技术(如HTML、CSS和JavaScript)。WebView2......
  • 睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注
    睡岗和玩手机数据集,4653张原始图,支持YOLO,VOCXML,COCOJSON格式的标注数据集分割训练组70%        3257图片有效集20%        931图片测试集10%        465图片预处理没有采用任何预处理步骤。增强未应用任何增......