Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >xml解析技术概述和使用Jaxp对xml文档进行dom解析

xml解析技术概述和使用Jaxp对xml文档进行dom解析

作者头像
MonroeCode
发布于 2018-01-12 10:09:34
发布于 2018-01-12 10:09:34
1.2K0
举报
文章被收录于专栏:Java技术分享Java技术分享

用dom和sax对xml文档进行解析,可以使用已开发的xml解析开发包,我们直接调用即可。xml解析开发包有:Jaxp(最差)、Jdom(一般)、dom4j(最好)。

JAXP: 定义一个xml文档:

代码语言:xml
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<书架>
    <>
        <书名 name="xxxx">java就业培训课程</书名>
        <作者>张孝祥</作者>
        <售价>109元</售价>
        <售价>39.00元</售价>
    </>
    <>
        <书名>javaScript网页开发</书名>
        <作者>张孝祥</作者>
        <售价>109元</售价>
        <售价>28.00元</售价>
    </>
</书架>

Jaxp解析xml文档的代码:

代码语言:java
AI代码解释
复制
package xml;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

public class Demo2 {
    public static void main(String[] args) throws Exception {

        //1、创建工厂
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

        //2、得到dom解析器
        DocumentBuilder builder=factory.newDocumentBuilder();  //newDocumentBuilder()返回dom解析器

        //3、解析xml文档,得到代表文档的document
        Document document= builder.parse("src/xml/book.xml");
    }
}

这样会得到文档的document对象,再对这个对象进行操作即可。

例:

代码语言:java
AI代码解释
复制
package xml;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

//使用dom方式对xml文档进行crud
public class Demo3 {


    //读取xml文档中:<书名>javaScript网页开发</书名>  节点中的值
    @Test
    public void read1() throws Exception{
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  //创建一个工厂
        DocumentBuilder builder=factory.newDocumentBuilder();  //newDocumentBuilder()返回dom解析器,得到解析器
        Document document= builder.parse("src/xml/book.xml");  //解析文档,拿到代表文档的document

        NodeList list=document.getElementsByTagName("书名"); //根据标签名“书名”返回内容集合

        Node node=list.item(1);  //下标从0开始,取第二个元素

        String content=node.getTextContent();  //得到节点里的文本内容
        System.out.println("read1:");
        System.out.println(content);
        System.out.println();
    }


    //得到xml文档中的所有节点(标签):使用递归,先得到根节点,再一层层往下找子节点
    @Test
    public void read2() throws Exception{
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  //创建一个工厂
        DocumentBuilder builder=factory.newDocumentBuilder();  //newDocumentBuilder()返回dom解析器,得到解析器
        Document document= builder.parse("src/xml/book.xml");  //解析文档,拿到代表文档的document

        //得到根节点
        Node root=document.getElementsByTagName("书架").item(0);  //因为只有一个根节点,集合中只有一个元素,直接.item(0)即可得到

        System.out.println("read2:");

        //得到根节点的孩子(递归方法)
        list(root);

        System.out.println();       
    }
    private void list(Node node) {
        if(node instanceof Element){  //判断node是不是标签,是标签才打印,否则打印结果会出现#text
            System.out.println(node.getNodeName());  //打印得到的节点的名称
        }
        NodeList list=node.getChildNodes(); //得到所有孩子,返回一个集合

        for(int i=0;i<list.getLength();i++){  //遍历这个集合
            Node child=list.item(i);    //得到每一个孩子
            list(child);    //迭代,得到孩子的孩子
        }
    }


    //得到xml文档中标签属性的值:<书名 name="xxxx">java就业培训课程</书名>  即name的值
    @Test
    public void read3() throws Exception{
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  //创建一个工厂
        DocumentBuilder builder=factory.newDocumentBuilder();  //newDocumentBuilder()返回dom解析器,得到解析器
        Document document= builder.parse("src/xml/book.xml");  //解析文档,拿到代表文档的document

        /*
         * getAttributes()会得到节点的所有属性,必须要再进行一次遍历才行,这样较麻烦,
         * 直接将bookname强制转换成Element(在已知的情况下才能转换)
         * */
        Element bookname=(Element) document.getElementsByTagName("书名").item(0); //得到第一个书名标签
        String value=bookname.getAttribute("name");  //得到name属性的值
        System.out.println("read3:");
        System.out.println(value);
    }
}

运行结果:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用JAXP对XML文档进行DOM解析
   璐小编在之前学习BS的时候接触过XML(请戳:【XML】基础知识初步认识),后来在项目中我们也会遇到XML的配置文件,现在学习Java又遇到对XML的文档内容进行解析。看来对于XML的认知是不断加深的过程~
MonroeCode
2018/01/12
1.1K0
DOM解析
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件 根据 DOM,XML 文档中的每个成分都是一个节点。 DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 标签是一个元素节点 包含在 XML 元素中的文本是文本节点 每一个 XML 属性是一个属性节点 注释属于注释节点 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来
汤高
2018/01/11
1.1K0
DOM解析
Java---XML的解析(1)-DOM解析
本章只讲DOM解析。接下来还会学习Dom4j和StAX 解析技术 DOM解析: DOM解析一次将所有的元素全部加载到内存中:如有以下XML文档:
谙忆
2021/01/21
7220
Java---XML的解析(1)-DOM解析
【Java 进阶篇】Java XML解析:从入门到精通
XML(可扩展标记语言)是一种常用的数据格式,用于存储和交换数据。在Java中,XML解析是一项重要的任务,它允许您从XML文档中提取和操作数据。本篇博客将从基础开始,详细介绍如何在Java中解析XML文档,包括DOM解析、SAX解析和StAX解析。无论您是XML的新手还是有一些经验的开发者,都能在本文中找到有关Java XML解析的有用信息。
繁依Fanyi
2023/10/25
3.7K0
【Java 进阶篇】Java XML解析:从入门到精通
Android 创建与解析XML(二)—— Dom方式
Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容
阳光岛主
2019/02/19
6700
android学习笔记----xml语法、约束、解析
xml文件的encoding默认是:"utf-8",但是如果用记事本编辑xml,保存的时候默认ANSI,代表使用平台的编码表gbk保存,不指定编码的话,在解析的时候可能会出现问题。在保存的时候选择UTF-8保存就可以不指定编码,最好还是要指定编码。
砖业洋__
2023/05/06
5950
android学习笔记----xml语法、约束、解析
技术经验|Java-Web基础之XML解析JAXP-DOM
XML是标记型文档,js 使用 dom 解析标记型文档是根据 html 的层级结构,在内存中分配一个属性结构,把 html 的标签,属性和文本都封装成 document 对象、element 对象,属性对象、文本对象,node 节点对象。
六月暴雪飞梨花
2023/09/24
2410
技术经验|Java-Web基础之XML解析JAXP-DOM
XML解析
XML解析 什么是DOM 使用DOM的解析步骤 什么是dom4j 使用dom4的解析步骤 什么是DOM DOM全称Document Object Model文档对象模型,将文档中的元素或者其他节点转换成一个一个的对象使用java代码操作XML或者js代码操作HTML DOM解析的特点 在加载的时候一次性把整个的XML文档载入内存,在内存中形成一颗树(Document对象) 之后使用代码去操作Document对象,其实是操作的是内存当中的DOM树,和本地磁盘中的XML文件没有直接关系 由于操作的是内存
木瓜煲鸡脚
2019/07/22
3.2K0
XML解析
XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
星哥玩云
2022/09/14
5.9K0
XML解析
Java一分钟之-XML解析:DOM, SAX, StAX
在Java开发中,XML作为一种标准的数据交换格式,其解析技术尤为重要。Java提供了三种主要的XML解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。本文将深入浅出地探讨这三种解析方式的原理、优缺点、常见问题、易错点及避免策略,并通过代码示例加以说明。
Jimaks
2024/06/01
4120
[ java 工具类] xml字符串解析成Map(DOM解析)
package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.pars
Tencent JCoder
2018/12/14
3.3K0
17.JAVA-Dom、Sax解析XML详解
jaxp是java api中自带的一个包,而dom4j需要我们加入jar文件才能使用
诺谦
2019/12/12
1.1K0
Java Document生成和解析XML(DOMHelper.createDocument()方法过期了)
参考:https://blog.csdn.net/p812438109/article/details/81807440
别先生
2020/12/01
6530
Java Document生成和解析XML(DOMHelper.createDocument()方法过期了)
XMl各种格式转换功能代码
import javax.xml.parsers.DocumentBuilder;
JQ实验室
2022/09/29
1.4K0
【Java】已解决:javax.xml.parsers.ParserConfigurationException
在Java开发中,处理XML文件是常见的需求。javax.xml.parsers.ParserConfigurationException是与XML解析相关的一个常见异常。当开发者尝试配置或创建XML解析器时,可能会遇到该异常。本文将详细分析该异常的背景、原因、错误与正确的代码示例,并提供相关的注意事项,以帮助读者解决这一问题。
屿小夏
2024/09/06
1730
【Java】已解决:javax.xml.parsers.ParserConfigurationException
Java解析XML(4种方法)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135863.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
1.1K0
java解析xml方法_详解Java解析XML的四种方法
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations)。
全栈程序员站长
2022/08/19
1.1K0
XXE漏洞:DocumentBuilder使用之殇
xxe这种漏洞无论是在php中还是java中,审计起来应该都是有迹可循的,在php中全局搜索特定函数,在java中需要找解析xml文档的类有没有被使用,所以,我们首先需要知道java有哪些常见的解析xml的类。本文只介绍一个xml解析类——DocumentBuilder,文章很短,可做快餐食用。
tnt阿信
2020/08/05
2.5K0
XXE漏洞:DocumentBuilder使用之殇
【Java 进阶篇】Java XML快速入门:理解、解析和生成XML
XML(可扩展标记语言)是一种常用于存储和交换数据的标记语言,而Java是一种强大的编程语言,它具有处理XML的能力。在本篇博客中,我们将探讨XML的基础知识,学习如何在Java中解析和生成XML文档,以及实际应用中如何处理XML数据。
繁依Fanyi
2023/10/25
3.1K0
【Java 进阶篇】Java XML快速入门:理解、解析和生成XML
java解析xml格式的节点属性值
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137716.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
2.3K0
相关推荐
使用JAXP对XML文档进行DOM解析
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档