JAPX(JAVA API for xml)中dom解析思路
来源:互联网 发布:下载地毯设计软件 编辑:程序博客网 时间:2024/05/22 00:35
xml文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE persons[ <!ELEMENT persons (person+)> <!ELEMENT person (name,age,addr)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT addr (#PCDATA)> <!ATTLIST person id ID #REQUIRED > ]><persons><person id="1"><name>小刘</name><age>25</age><addr>兰州交通大学</addr></person><person id="2"><name>小张</name><age>24</age><addr>西北师范大学</addr></person></persons>
解析代码
package com.water.coder;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.junit.Test;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;/** * @author Administrator * JackHall 又称 * WaterCoder 简称wc */public class TestForXmlParse {// 每个函数都是一个测试函数@Testpublic void testDom01() throws ParserConfigurationException, SAXException,IOException {// 建立解析工厂DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// 建立解析器DocumentBuilder db = dbf.newDocumentBuilder();// 加载文档Document document = db.parse(new File("Person.xml"));// 通过名字获取标签NodeList list = document.getElementsByTagName("name");// 了解No的List和Node的用法,如何遍历for (int i = 0; i < list.getLength(); i++) {Element elem = (Element) list.item(i);// 获取元素的文本内容String text = elem.getTextContent();System.out.println("人名:" + text);}}@Testpublic void testDom02() throws ParserConfigurationException,SAXException, IOException {// Dom解析三步骤:// 1.获取解析工厂// 2.获取解析器// 3.加载文档,并获取文档节点// 4.进行需求的解析DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse(new File("Person.xml"));// 解析具体的对象时,一般分为两种办法// 1.通过获取他们的父节点// 2.通过获取他们的兄弟节点//在这里你需要理解一个点:/*<person><name>小刘</name><age>25</age><addr>兰州交通大学</addr> </person> person下面的第一个节点为回车换行<name>为第二个节点(访问时item(1)) person下面的第三个节点为回车换行<age>为第四个节点(访问时item(3)) person下面的第四个节点为回车换行<addr>为第五个节点(访问时item(5))*/// 需求1:获取小刘的地址// 1。获取父节点NodeList list = document.getElementsByTagName("person");for (int i = 0; i < list.getLength(); i++) {// 获取本节点Element person = (Element) list.item(i);// 获取子节点NodeList childList = person.getChildNodes();// 下面一般要你了解自己的数据结构// 我的名字存储在person下面的第一个节点Element pName = (Element) childList.item(1);// 如果名字等于你要查找的名字if (pName.getTextContent().equals("小刘")) {// 地址存放在Person下的第5个Element pAddr = (Element) childList.item(5);System.out.println("小刘的地址为" + pAddr.getTextContent());}}// 需求2:获取小张的年龄NodeList pNameList = document.getElementsByTagName("name");for(int i = 0;i<pNameList.getLength();i++){//获取对应的姓名节点Element pName = (Element)pNameList.item(i);//判断if(pName.getTextContent().equals("小张")){//找到节点后//因为节点与节点之间相聚比较多,使用函数封装一下,否则代码看起来不整洁Element pAge = getPAddr(pName);System.out.println("小张的年龄"+pAge.getTextContent());}}}//获取这个结构中的年龄节点public Element getPAddr(Element pName){//getNextSibling获取下一个节点,和上面的一样有文本节点和元素节点Element pAge = (Element)pName.getNextSibling().getNextSibling();return pAge;}@Testpublic void testDom03() throws ParserConfigurationException, SAXException, IOException{DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse(new File("Person.xml"));//获取节点通过getElementById();//ID是文档约束,不仅仅是属性而已//如果只是属性那么下面获取的就是空指针了Element eml = document.getElementById("1");if(eml!=null){System.out.println(eml.getNextSibling().getNextSibling().getTextContent());}}@Testpublic void testDom04() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document doc = db.parse(new File("Person.xml"));TransformerFactory tff = TransformerFactory.newInstance();Transformer tf = tff.newTransformer();DOMSource domSource = new DOMSource(doc);StreamResult sr = new StreamResult(new File("Person_bak.xml"));tf.transform(domSource, sr);}}
0 0
- JAPX(JAVA API for xml)中dom解析思路
- JAXP:(Java API for XML Processing)DOM方式解析XML文件
- Java中Dom解析XML
- java中DOM解析xml
- JAVA中利用DOM解析XML文档
- Java中使用DOM解析XML
- java中XML文档解析1(Dom)
- java中使用dom解析xml
- Java中DOM方式解析XML
- XML文件 for DOM 解析
- JAVA解析XML DOM
- JAVA解析XML DOM
- JAVA解析XML DOM
- Java Dom解析XML
- JAVA解析XML DOM
- Java Dom解析xml
- Java Dom解析xml
- java dom解析xml
- ASP.NET Auto Deployment with MSBuild
- swift 学习<二> if分支, for循环,
- Android ListView性能优化,异步加载图片
- Android基础学习——Activity生命周期
- 关于回调函数的一些问题解决
- JAPX(JAVA API for xml)中dom解析思路
- HDU 1106 排序
- ::运算符用于区别局部变量和全局变量
- 十六进制序列
- Memcached内存管理分析
- C++的const类成员函数-精华版
- lintcode-颠倒整数
- Windows下(Windows 10 & Windows Server 2012)部署Tomcat(不定时更新)
- Linux下gcc编译C程序指令小结