1.DocumentBuilderFactory--解析器工厂(抽象类 javax.xml.parsers.DocumentBuilderFactory)

newInstance()  获取 DocumentBuilderFactory 的新实例。
    newDocumentBuilder()  使用当前配置的参数创建一个新的 DocumentBuilder 实例。
    
2.DocumentBuilder--解析器(抽象类  javax.xml.parsers.DocumentBuilder)
    parse(String uri)
      将给定 URI 的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。(url是相对路径---项目)
      - Document (接口,父接口Node org.w3c.dom.Document)    
      - Node (接口   org.w3c.dom.Node )
             
3.Document(接口,父接口Node org.w3c.dom.Document)    
     getElementsByTagName(String tagname)
             返回文档中所有指定的标签名节点(NodeList)
     getElementById(String elementId)
            返回具有带给定值的 ID 属性的 Element。

    createElement(String tagName)
            创建指定的节点(标签)。
     createTextNode(String data)
            创建给定指定字符串的 Text 节点。

4.NodeList(接口)
    jdk文档介绍:NodeList 接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。DOM 中的 NodeList 对象是活动的
    getLength()       列表中的节点数。
    item(int index)   返回集合中的第 index 个项(Node类型)。
        
5.Node(接口 org.w3c.dom.Node )常用方法
    - 获取
    getFirstChild()               此节点的第一个子节点。
    getLastChild()               此节点的最后一个节点。
    getParentNode()              此节点的父节点。
    getChildNodes()              包含此节点的所有子节点的 NodeList。
    getNextSibling()              直接在此节点之后的节点。
    getNodeValue()               此节点的值,取决于其类型;
    getPreviousSibling()            直接在此节点之前的节点。
    getTextContent()              此属性返回此节点及其后代的文本内容。

- 添加
    appendChild(Node newChild)        将节点 newChild 添加到此节点的子节点列表的末尾。
    insertBefore(Node newChild, Node refChild)  在现有子节点 refChild 之前插入节点 newChild。

- 删除
    removeChild(Node oldChild)        从子节点列表中移除 oldChild 所指示的子节点,并将其返回。

- 修改
    replaceChild(Node newChild, Node oldChild)  将子节点列表中的子节点 oldChild 替换为 newChild,并返回 oldChild 节点。

    setNodeValue(String nodeValue)      此节点的值,取决于其类型;
    setTextContent(String textContent)    此属性返回此节点及其后代的文本内容。

    - 判断
    isEqualNode(Node arg)           测试两个节点是否相等

xml文件

<?xml version="1.0" encoding="uft-8"?>
<!DOCTYPE persion SYSTEM "NewFile1.dtd">
<persion ID="persion">
<name ID="name1">张三</name>
<name ID="name2">zhangsan</name>
<age ID="age">18</age>
<sex ID="sex">男</sex>
</persion>

java代码(根据标签名,查询标签里面的文本)

public class Demo1 {
public static void main(String[] args) throws Exception {
//查询标签名为name中的文本
selText("name");
} //查询
public static void selText(String strname) throws ParserConfigurationException, SAXException, IOException {
//实例化解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//根据解析器工厂实例化解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//获取xml的全部节点(根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象)
Document document = builder.parse("src/NewFile1.xml");
//根据标签名获取
NodeList list = document.getElementsByTagName(strname);
for(int i = 0 ; i<list.getLength() ; i++) {
//获取每一个name节点
Node name = list.item(i);
//获取每个name节点里面的文本
String nametext = name.getTextContent();
//输出文本
System.out.println(nametext);
}
}
}

结果

在我们使用增删改的时候,我们改动的都是内存中的数据节点,想要改动硬盘上面的数据节点,我们需要更新xml文本,下面是更新文本的一些类和方法

注意:我们的格式要是utf-8,不然我们更新后中文会出现乱码的哦!(gbk和utf-16不能写)

TransformerFactory(抽象类 javax.xml.transform ,TransformerFactory 实例可用于创建 TransformerTemplates 对象)

  一些方法

    newInstance()   创建TransformerFactory实例

    newTransformer() 创建Transformer实例

Transformer(抽象类,此抽象类的实例能够将源树转换为结果树。javax.xml.transform)

  transform(Source xmlSource, Result outputTarget)  将 XML Source 转换为 Result

  例如:transformer.transform(new DOMSource(document), new StreamResult("src/NewFile1.xml"));

  - Source 接口 实现类之一  DOMSource

  - Result 接口 实现类之一  StreamResult

添加节点(标签):在最后一个name标签里面添加新标签

代码如下:

public class Demo2 {
public static void main(String[] args) throws Exception {
//实例化解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//实例化解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//获取整个文档的节点对象
Document document = builder.parse("src/NewFile1.xml");
//创建一个标签
Element newelement = document.createElement("newelement");
//创建文本
Text text = document.createTextNode("新添加的标签");
//把文本添加到新创建的标签里面
newelement.appendChild(text);
//获取所有的name标签
NodeList list = document.getElementsByTagName("name");
//获取最后一个name标签
Node node = list.item(list.getLength()-1);
//在最后一个name标签里面添加一个子标签(newelement)
node.appendChild(newelement);
//因为我们处理的都是内存中的数据,不会影响到硬盘上面的数据,所以我们要把我们处理后的数据重新存储到硬盘上。
//更新xml文件(增删改都需要更新xml文件)
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/NewFile1.xml"));
}
}

xml更新后(我们可以发现添加成功了,但是格式看着很不爽)

<?xml version="1.0" encoding="utf-8" standalone="no"?><persion ID="persion">
<name ID="name1">张三</name>
<name ID="name2">zhangsan<newelement>新添加的标签</newelement></name>
<age ID="age">18</age>
<sex ID="sex">男</sex>
</persion>

删除节点:删除上面添加的标签(下面这个方法只能删除一个目标文件)

public class Demo3 {
public static void main(String[] args) throws Exception {
//实例化解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//实例化解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//获取xml文档(根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象)
Document document = builder.parse("src/NewFile1.xml");
//获取全部的目标节点对象(标签)
NodeList list = document.getElementsByTagName("newelement");
//获取NodeList集合中的一个目标节点
Node node = list.item(0);
//获取目标节点的父节点
Node faterNode = node.getParentNode();
//根据父节点删除父节点中的子节点(目标节点),如果要一次删除多个,那么需要使用循环
faterNode.removeChild(node);
//更新xml文档
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/NewFile1.xml"));
}
}
<?xml version="1.0" encoding="utf-8" standalone="no"?><persion ID="persion">
<name ID="name1">张三</name>
<name ID="name2">zhangsan</name>
<age ID="age">18</age>
<sex ID="sex">男</sex>
</persion>

修改:把标签名为sex的里面的文本修改

public class Demo4 {
public static void main(String[] args) throws Exception {
//实例化解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//实例化解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//获取整个文档的节点对象
Document document = builder.parse("src/NewFile1.xml");
//获取要修改的全部节点(NodeList集合)
NodeList list = document.getElementsByTagName("sex");
//获取目标节点的父节点
//循环NodeList集合,修改指定的全部目标节点(标签)中的文本
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
node.setTextContent("女");
}
//更新xml文档
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/NewFile1.xml"));
}
}
<?xml version="1.0" encoding="utf-8" standalone="no"?><persion ID="persion">
<name ID="name1">张三</name>
<name ID="name2">zhangsan</name>
<age ID="age">18</age>
<sex ID="sex">女</sex>
</persion>

4. jaxp----dom解析器(DocumentBuilderFactory、DocumentBuilder)的更多相关文章

  1. dom解析器机制 web基本概念 tomcat

    0 作业[cn.itcast.xml.sax.Demo2]   1)在SAX解析器中,一定要知道每方法何时执行,及SAX解析器会传入的参数含义 1 理解dom解析器机制 1)dom解析和dom4j原理 ...

  2. JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...

  3. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  4. JAVA与DOM解析器基础 学习笔记

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的 ...

  5. 使用dom解析器对xml文档内容进行增删查改

    直接添代码: XML文档名称(one.xml) <?xml version="1.0" encoding="UTF-8" standalone=" ...

  6. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  7. Java DOM解析器 - 解析XML文档

    使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...

  8. PHP Simple HTML DOM解析器

    一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的h ...

  9. PHP Simple HTML DOM解析器使用入门

    http://www.cnphp.info/php-simple-html-dom-parser-intro.html 一直以来使用php解析html文档树都是一个难题.Simple HTML DOM ...

  10. PHP HTML DOM 解析器 中文手册

    简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册 目录 快速入门 如何创建HTML DOM 对象? 如何查找HTML元素? 如何访问H ...

随机推荐

  1. 自动化运维工具之Zabbix

    一.部署zabbix 1.配置master节点 准备LAMP环境和zabbix的yum源 # yum install httpd php mariadb-server -y # vim /etc/my ...

  2. Linux内核调试方法总结之strace

    strace [用途] strace是一个功能强大的调试.分析.诊断工具,跟踪程序或进程执行时的系统调用和所接收的信号.可将所调用的系统调用的名称.参数和返回值输出到标准输出或者输出到-o指定的文件. ...

  3. fedora如何使用themes主题?

    DBus: 是一个 local 的IPC 进程间通信机制 如果是(一对一) 多对多的通信, 则DBUS 后台充当了一个路由器的角色. ibus: 是包含: python gtk dbus的 scim- ...

  4. 4 cdh 5.12 centos 6.10三节点安装

    4 cdh 5.12  centos 6.10 三节点安装 [root@hadoop1 opt]# cat /etc/redhat-release CentOS release 6.10 (Final ...

  5. WPF资源字典的使用

    1.在解决方案中添加资源字典:鼠标右键——添加——资源字典 2.在资源字典中写入你需要的样式,我这里简单的写了一个窗体的边框样式 3.在App.xaml中加入刚刚新建的资源字典就好了

  6. STL 仿函数(函数对象)

    ##定义 仿函数(functor):一种具有函数性质的对象. 仿函数在C++中的新名称为函数对象(function object). 仿函数类对象像函数一样被调用,调用仿函数类对象时,实际调用的是仿函 ...

  7. CentOS7 redhat7 linux系统1分钟安装Zabbix web 监控 服务器

    一.准备工作OS:centos7.4Zabbix version:3.4.6(2018/1/15日上线的新版本)Database:MariaDB关闭防火墙:systemctl stop firewal ...

  8. [19/05/26-星期日] JavaScript_ 基本语法_运算符

    一.概念 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  9. ECharts-第一篇最简单的应用

    1.简单演示一个饼状图 准备好echarts-all.js 2.编写页面代码 <!DOCTYPE html> <html> <head> <meta char ...

  10. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...