JAVA进阶-解析xml文件-jaxp解析器

tech2026-06-08  2

XML简介 jaxp解析XML dom4j解析XML

文章目录

xml的解析简介jaxp解析器DOMdom查询dom添加节点dom修改节点dom删除节点dom遍历节点的所有子节点 SAX

   

xml的解析简介

xml的解析方式(技术):dom 和 sax

dom解析和sax解析区别:

dom方式解析

根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象缺点:如果文件过大,造成内存溢出优点:很方便实现增删改操作  

sax方式解析

采用事件驱动,边读边解析从上到下,一行一行的解析,解析到某一个对象,返回对象名称缺点:不能实现增删改操作优点:如果文件过大,不会造成内存溢出,方便实现查询操作

想要解析xml,首先需要解析器 不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供

sun公司提供了针对dom和sax解析器 jaxpdom4j组织,针对dom和sax解析器 dom4j (最多使用)jdom组织,针对dom和sax解析器 jdom (基本没人用)

jaxp解析器

jaxp是javase的一部分, jaxp解析器在jdk的javax.xml.parsers包里面

四个类:分别是针对dom和sax解析使用的类

dom: DocumentBuilder、DocumentBuilderFactory sax: SAXParser 、 SAXParserFactory

   

DOM

*** dom: DocumentBuilder、DocumentBuilderFactory DocumentBuilder : dom解析器类 - 这个类是一个抽象类,不能new, 此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取 - 一个方法,可以解析xml parse("xml路径") 返回是 Document 整个文档 - 返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找 DocumentBuilderFactory: dom 解析器工厂 - 这个类也是一个抽象类,不能new newInstance() 获取 DocumentBuilderFactory 的实例。 dom操作步骤 1、创建解析器工厂 DocumentBuilderFactory.newInstance(); 2、根据解析器工厂创建解析器 builderFactory.newDocumentBuilder(); 3、解析xml返回document Document document = builder.parse("src/person.xml"); 4、根据document的方法进行其他操作 --------- 在document里面方法 --------- getElementsByTagName(String tagname) -- 这个方法可以得到标签 -- 返回集合 NodeList createElement(String tagName) -- 创建标签 createTextNode(String data) -- 创建文本 appendChild(Node newChild) -- 把文本添加到标签下面 removeChild(Node oldChild) -- 删除节点 getParentNode() -- 获取父节点 NodeList list - getLength() 得到集合的长度 - item(int index)下标取到具体的值 for(int i=0;i<list.getLength();i++) { list.item(i) } getTextContent() - 得到标签里面的内容

   

dom查询

   

dom添加节点

   

dom修改节点

   

dom删除节点

   

dom遍历节点的所有子节点

//遍历并缩进输出一个xml结点的所有子节点: public static void printDocument(Node node) { int n = 0; if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); } NodeList list = node.getChildNodes(); n++; for (int i = 0; i < list.getLength(); i++) { printDocument(list.item(i),n); } } public static void printDocument(Node node,int n) { if (node.getNodeType() == Node.ELEMENT_NODE) { for (int i = 0; i < n; i++) { System.out.print(" "); } System.out.println(node.getNodeName()); } NodeList list = node.getChildNodes(); n++; for (int i = 0; i < list.getLength(); i++) { printDocument(list.item(i),n); } }

SAX

*** sax:SAXParser、SAXParserFactory SAXParser:sax解析器类 此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得 - parse(File f, DefaultHandler dh) * 两个参数 ** 第一个参数:xml的路径 ** 事件处理器 SAXParserFactory: 解析器工厂 实例 newInstance() 方法得到 sax执行过程 * 当解析到开始标签时候,自动执行startElement方法 * 当解析到文本时候,自动执行characters方法 * 当解析到结束标签时候,自动执行endElement方法

最新回复(0)