码迷,mamicode.com
首页 > 其他好文 > 详细

XML

时间:2019-09-12 09:15:35      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:connector   ring   外部   导入jar包   attribute   xpath   element   技术   cte   

 

未完待续!~

 

 

dom4j解析

需要添加第三方jar包 可以去https://dom4j.github.io/下载

技术图片

 

 

stus.xml

<?xml version="1.0" encoding="UTF-8"?>
<stus>
<stu>
  <name>w</name>
  <college>qsing</college>
  <tele>1365</tele>
</stu>
<stu>
<name>x</name>
<college>zju</college>
<tele>1893</tele>
</stu>
</stus>

 a.java

import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import java.util.Iterator;
public class a {
    public static void main(String[] args){
        try {
            //创建解析器
            SAXReader reader = new SAXReader();
            //通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树
            Document document=reader.read("conf/stus.xml");
            //获取根节点
            Element root=document.getRootElement();
            //遍历根节点
            for(Iterator<Element>rootIter=root.elementIterator();rootIter.hasNext();){
                 Element studentElt=rootIter.next();
                 for (Iterator<Element>innerIter=studentElt.elementIterator();innerIter.hasNext();)
                 {
                     Element innerElt=innerIter.next();
                     String innerValue=innerElt.getStringValue();
                     System.out.println(innerValue);
                 }
                 System.out.println("-----------------------");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

 

sax解析 不需要外部导入jar包

优点:

无需将整个文档加载到内存中,所以内存消耗少,适合解析特别大的XML文件

1.创建解析工厂:通过newInstance()方法获取

SAXParserFactory saxParseFactory=SAXParseFactory.newInstance();

2.创建解析器

SAXParser saxParser=saxParserFactory.newSAXParser();

执行parse方法,需要传递两个参数:

1.XML文件路径

2.事件处理器

当把事件处理器传递进来,相当于在方法里面绑定了事件处理器,该事件是自动执行

执行事件处理器的三个方法:

startElement(String url,String localName,String qName,Attributes attributes);

characters(char[] ch,int start,int length);

endElement(String url,String localName,String qName);

qName 把标签名称返回

attributes 返回标签中的属性对象

 

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.Iterator;
public class a {
  public static void main(String[] args){
      //创建解析器工厂
    SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
  //创建解析器
      try{
          SAXParser saxParser=saxParserFactory.newSAXParser();
          //通过解析器的parse方法
          saxParser.parse("conf/stus.xml",new MyDefaultHandler());
      }catch (Exception e){
          e.printStackTrace();
      }
}
}
class MyDefaultHandler extends DefaultHandler{
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.print("<"+qName+">");
    }
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        System.out.print(new String(ch,start,length));
    }
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        System.out.print("</"+qName+">");
    }
}

打印出来的效果:

<stus>
<stu>
  <name>wxy</name>
  <college>qsing</college>
  <tele>1365</tele>
</stu>
<stu>
<name>x</name>
<college>zju</college>
<tele>1893</tele>
</stu>
</stus>

 

 

使用dom4j和xpath解析XML文件

需要下载jaxen.jar 下载地址

http://www.java2s.com/Code/Jar/j/Downloadjaxen11beta11jar.htm

import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
public class a{
public static void main(String[]args){
    try {
        SAXReader reader=new SAXReader();
        Document document=reader.read("conf/stus.xml");
        //name节点元素的路径:stus->stu->name
        //name节点元素的xpath路径:/stus/stu/name
        //name节点元素的xpath路径:stus//name
        //name节点元素的xpath路径://name
        Element driverNameElt=(Element)document.selectSingleNode("/stus/stu/name");
        //获取driverNameElt节点元素对象的文本内容
        String driverName=driverNameElt.getStringValue();
        System.out.print(driverName);//wxy
        Element urlElt=(Element)document.selectSingleNode("stus//name");
        String url=urlElt.getText();
        System.out.print(url);//wxy
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

 

 

 

获取结点元素中的值

sys-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<server>
  <service>
    <connector port="8080"></connector>
  </service>
</server>

 a.java

方法1

import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
public class a {
    public static void main(String[] args) throws DocumentException {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("conf/sys-config.xml");
        Element connectorElt=(Element)document.selectSingleNode("//connector");
        //获取connectorElt节点元素对象的port属性对象
        Attribute portAttr=connectorElt.attribute("port");
        //获取portAttr属性对象的值
        String port=portAttr.getStringValue();
        System.out.print(port);//8080
    }
}

 方法2

import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
public class a {
    public static void main(String[] args) throws DocumentException {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("conf/sys-config.xml");
        Element connectorElt=(Element)document.selectSingleNode("//connector");
        String portValue=connectorElt.attributeValue("port");
        System.out.print(portValue);//8080
    }
}

 

XML

标签:connector   ring   外部   导入jar包   attribute   xpath   element   技术   cte   

原文地址:https://www.cnblogs.com/zuiaimiusi/p/11509725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!