1.使用jaxp实现查询操作

person.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person>
<p1>
     <name>宝娟</name>
     <age>20</age>
     <school>**大学**</school>
</p1>   
<p1>
     <name>鑫鑫</name>
     <age>25</age>
     <school>**大学**</school>    
</p1>
</person>

package example4;

//jaxp技术解析xml文件
import java.io.IOException;
import java.util.function.DoubleConsumer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

//类名
class person {

//主方法
    public static void main(String[] args) throws Exception {
        // jaxp技术解析xml文件
        // 1.创建解析器工厂
        //selectAll();
        //selectSome();
        // addSex();
        //modifySex();
        //delSex();
        visitAll();
    }

// 向某一个标签下添加新的结点
    private static void addSex() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("src/example4/person.xml");
        // 获取标签
        NodeList list = document.getElementsByTagName("school");
        // 获得具体的一个节点
        Node school1 = list.item(0);
        // 创建一个新的节点
        Element s = document.createElement("sex");
        // 创建一个文本
        Text text1 = document.createTextNode("男");
        // 将新的节添加入某个节点之后
        school1.appendChild(s);
        // 在新节点之下添加文本
        s.appendChild(text1);
        // 经过以上操作之后,没有报错,但没有将具体内容写入xml文件,是因为这一切内容只是在内存中操作,接下来需要写入xml文件
        // 回写xml文件(利用transformer类进行回写操作)
        // 创建TransformerFactory解析工厂
        TransformerFactory transformer = TransformerFactory.newInstance();
        // 创建tansformer解析器
        Transformer former = transformer.newTransformer();
        former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
    }

// 修改第一个节点<p1>下的sex改为女
    private static void modifySex() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("src/example4/person.xml");
        NodeList list = document.getElementsByTagName("sex");
        Node name1 = list.item(0);
        //重新设置sex的值
        name1.setTextContent("女");
        // xml回写
        TransformerFactory transformer = TransformerFactory.newInstance();
        Transformer former = transformer.newTransformer();
        former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
    }

// 删除节点sex
    private static void delSex() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("src/example4/person.xml");
        NodeList list = document.getElementsByTagName("sex");
        //得到sex节点
        Node name1 = list.item(0);
        //得到sex的父节点
        Node name2 = name1.getParentNode();
        //父节点删除子节点
        name2.removeChild(name1);
        // xml回写
        TransformerFactory transformer = TransformerFactory.newInstance();
        Transformer former = transformer.newTransformer();
        former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
    }

// 只查询xml中某一结点的值
    private static void selectSome() throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse("src/example4/person.xml");
        NodeList list = document.getElementsByTagName("name");
        System.out.println(list.item(0).getTextContent());
    }

   // jaxp技术解析xml文件,获取所有的name
    private static void selectAll() throws ParserConfigurationException, SAXException, IOException {
        // 1.创建解析器工厂
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        // 2.创建解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        // 3.得到document对象
        Document document = builder.parse("src/example4/person.xml");
        // 4.获取想要的结果
        NodeList list = document.getElementsByTagName("name");
        //遍历结点列表
        for (int i = 0; i < list.getLength(); i++) {
            //得到结点
            Node name = list.item(i);
            //得到该节点的内容
            String s = name.getTextContent();
            System.out.println(s);
        }
    }
    
    
    
    //遍历xml中的所有元素名称并打印输出
    private static void visitAll() throws Exception {
        DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=builderFactory.newDocumentBuilder();
        Document document=builder.parse("src/example4/person.xml");
        list1(document);
        
    }
    //递归遍历的方法
    private static void list1(Node node) {
        //得到它的子节点序列
            NodeList list=node.getChildNodes();
            for(int i=0;i<list.getLength();i++) {
                //的到每一个节点
                Node node1=list.item(i);
                //递归调用继续得到它的子节点序列
                list1(node1);
            }
            //判断是元素类型才打印
            if(node.getNodeType()==node.ELEMENT_NODE) {
            System.out.println(node.getNodeName());
            }
    }
}

**以上是jaxp解析xml的提个简单方法介绍,不会的可以查找中文版手册,只需firefox或者google"java platform se 6"即可找到相关方法介绍,建议大家使用eclipse编辑器,每一步有提示,很方便。

如有其他问题,欢迎留言,我们一起讨论你一起学习。

**革命尚未成功,通知仍需努力!

dom技术解析xml下jaxp解析器详细代码的更多相关文章

  1. sax技术解析xml下jaxp解析器详细代码

    *解析xml的两种技术dom和sax dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象. sax方式:事件驱动,边读边解析. 在javax.xml.parser ...

  2. Android解析XML之SAX解析器

    SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...

  3. xml解析方式之JAXP解析入门

    XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...

  4. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

  5. ElementTree 解析xml(minidom解析xml大文件时,MemoryError)

    在使用minido解析xml文件时,因为文件过大,结果报错MemoryError.查询后得知是因为minidom在解析时是将所有文件放到内存里的,很占用内存,所以要考虑换一种方法来处理xml文件.   ...

  6. Sax解析xml及pull解析xml

    sax解析参考:http://www.iteye.com/topic/763895: 说明:测试时报空指针异常,未能读取到数据,关注Sax解析的过程及API即可: pull解析参考:http://ww ...

  7. 使用XMLConfiguration解析xml,PropertiesConfiguration解析properties等相应信息

    org.apache.commons.configuration.XMLConfiguration; Apache Common-Configuration工具可以从Properties文件,XML文 ...

  8. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

    一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...

  9. XML 解析之 jaxp 解析器

    XML 的解析方式有两种方式: DOM 解析和 SAX 解析. DOM 解析: 根据 XML 的层级结构, 在内存中分配一个树形结构, 把 XML 的标签, 属性和文本都封装成对象. 优点: 可以实现 ...

随机推荐

  1. MySQL中的information_schema

    information_schema 数据库是MySQL自带的,可看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的表,表栏的数据类 ...

  2. linq 两个字段排序

    在linq中排序方法有: OrderBy()  --对某列升序排序 ThenBy()    --某列升序后对另一列后续升序排序 OrderByDescending() --对某列降序排序 ThenBy ...

  3. Python数据类型及常用操作

    Python字符串类型 1.用途: 用来记录有描述性的状态.比如:人名,地址等. 2.定义方式: 创建字符串非常简单,在‘ ’,“ ”,‘’‘ ’‘’内一填写一系列的字符例如:msg='hello' ...

  4. ASP.NET MVC 音乐商店 - 2.控制器

    在典型的 Web 应用中,用户请求的 URL 地址通常映射到保存在网站中的文件上,例如,当用户请求 /Products.aspx 的时候,或者 /Products.php 的时候,很可能是在通过处理 ...

  5. Centos 6/RHEL disable the IPv6 module.

    http://minimallinux.blogspot.com/2013/07/centos-6rhel-disable-ipv6-module.html IPv6 was introduced t ...

  6. Oracle11g 卸载教程图解

    1:停掉所有Oracle相关的服务 1.1打开服务方式如下: 1.1.1:右击“计算机”–>管理–>服务和应用程序–>服务 1.1.2:开始–>输入“服务”后点击搜索–> ...

  7. Linux命令之查看内存和CPU消耗命令TOP使用

    1)输入top ,按enter键,即可查看服务器内存消耗情况 注意:其中PID表示进程号 :%cpu表示cpu消耗情况:%M表示内存消耗情况:通常在做性能测试的时候用到该命令: 默认为实时刷新:按s键 ...

  8. CRM WebClient UI里的文件是如何上传到Netweaver后台的

    使用Chrome开发者工具调试CRM WebClient UI里附件上传的功能: 从本地选择一个文件,断点触发: 前端取得用户选中上传的文件名: Jerry.txt 点Attach按钮后,触发ABAP ...

  9. 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告

    点此进入比赛 得分: \(97+0+10=107\) 排名: \(Rank\ 3\) \(Rating\):\(+47\) \(T1\):[HHHOJ187]Hashit(点此看题面) 容易想到可以用 ...

  10. uva题库爬取

    每次进uva都慢的要死,而且一步一步找到自己的那个题目简直要命. 于是,我想到做一个爬取uva题库,记录一下其中遇到的问题. 1.uva题目的链接是一个外部的,想要获取https资源,会报出SNIMi ...