XML的3种解析方式

Dom4j解析

(1) Dom4j

 

//创建解析器

SAXReader saxReader = newSAXReader();

//通过解析器的read方法将xml文件 读取到Document对象

Document doc =saxReader.read("要读取的.xml");

//获取XML文件的根节点:students

Element root = doc.getRootElement();

//开始遍历根节点students

for(Iterator<Element> iter =root.elementIterator(); iter.hasNext();){

//student子节点

Element studentEle = iter.next();

for(Iterator<Element> iterator= studentEle.elementIterator();iterator.hasNext();){

Element elts = iterator.next();

String value = elts.getText();

System.out.println(value);

}

}

这是我的XML文件,可以对比理解

 

<?xmlversion="1.0" encoding="UTF-8"?>

<students>

<student>

<name>吴飞</name>

<college>java学院</college>

<telephone>62354666</telephone>

<notes>男,1982年生,硕士,现就读于北京邮电大学</notes>

</student>

<student>

<name>李雪</name>

<college>C++学院</college>

<telephone>62358888</telephone>

<notes>男,1987年生,硕士,现就读于中国农业大学</notes>

</student>

<student>

<name>Jack</name>

<college>PHP学院</college>

<telephone>66666666</telephone>

<notes>我是澳洲人</notes>

</student>

<student>

<name>Lucy</name>

<college>Android学院</college>

<telephone>88888888</telephone>

<notes>我是美国人</notes>

</student>

</students>

 

(2) Dome4jXpath

 

 

//创建解析器

SAXReader reader = new SAXReader();

//通过解析器的read方法将xml文件读取到Document对象中。

Document doc =reader.read("sys-config.xml");

//driver- > name

//config-> database -> info -> driver -> name

String driverNameXpath =("/config/database-info/driver-name");

Element driverNamePath =(Element)doc.selectSingleNode(driverNameXpath);

String driverName =driverNamePath.getStringValue();

System.out.println(driverName);

//url

Element urlNamePath = (Element)doc.selectSingleNode("//url");

String url =urlNamePath.getStringValue();

System.out.println(url);

//user:

Element userNamePath = (Element)doc.selectSingleNode("//user");

String user=userNamePath.getStringValue();

System.out.println(user);

//password

Element passwordPath = (Element)doc.selectSingleNode("//password");

String password  = passwordPath.getStringValue();

System.out.println(password);

这是我的xml文件,对比的看更好理解

<?xml version="1.0" encoding="UTF-8"?>
<config>
<database-info>
<driver-name>com.mysql.jdbc.Driver</driver-name>
<url>jdbc:mysql://x.x.x.x:8080/yy</url>
<user>root</user>
<password>123</password>
</database-info>
</config>

(3)Dome4jXpath

 

//创建解析器

SAXReader reader = new SAXReader();

//通过解析器的read方法  将xml文件读取到Document 对象中

Document doc =reader.read("server.xml");

//connecrtor:server-> service -> connector

Element connElt = (Element)doc.selectSingleNode("/server/service/connector");

//获取port属性对象

Attribute portAttr =connElt.attribute("port");

//获取port属性对象的值

String port =portAttr.getStringValue();

System.out.println(port);

这是我的xml文件,对比的看更好理解

<?xmlversion="1.0" encoding="UTF-8"?>

<server>

<service>

<connector port="8080">

</connector>

</service>

</server>

SAX

 //创建解析工厂

SAXParserFactory parserFactory =SAXParserFactory.newInstance();

//创建解析器

SAXParser parser =parserFactory.newSAXParser();

//通过解析器的parser方法

parser.parse("person.xml",new myDefaultHandler());

 

class myDefaultHandler extends DefaultHandler{

 @Override 

 publicvoid startElement(String uri, String localName, String qName Attributesattributes) throws             SAXException {

System.out.print("<"+qName+">")

 }

  @Override

  publicvoid characters(char[] ch, int start, int length)throwsSAXException {

System.out.print(newString(ch,start,length));

}

 

@Override

publicvoid endElement(String uri, String localName, String qName)

throwsSAXException {

  System.out.print("</"+qName+">");

    }        

    }

 这是我的xml文件,对比的看更好理解

<?xmlversion="1.0" encoding="UTF-8"?>

<person>

<p1>

<name>zhangsan</name>

<age>20</age>

</p1>

<p1>

<name>wangwu</name>

<age>29</age>

</p1>

</person>

 

Xpath

 

//获取解析工厂

DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory.newInstance();

//获取解析器

DocumentBuilder builder =builderFactory.newDocumentBuilder();

//通过解析器的parser方法将xml文件读取到Document(org.w3c.Document)对象中

Document doc =builder.parse("books.xml");

//获取XPath对象

XPath xpath =XPathFactory.newInstance().newXPath();

//获取bookstore节点下book属性,category值为web下的第二个title节点的文本内容

//bookstore -> book[@categor='web'][2] -> title ->text()

String titleXpath ="/bookstore/book[@category='web'][2]/title/text()";

String title = (String)xpath.evaluate(titleXpath,doc,XPathConstants.STRING);

System.out.println(title);

//获取bookstore节点下book属性 category 值为 web 的title 属性的uk 节点内容

//bookstore- > book[@category='web'] -> title[@lang='uk']

String ukTitleXpath ="/bookstore/book[@category='web']/title[@lang='uk']/text()";

String ukTitle= (String)xpath.evaluate(ukTitleXpath,doc,XPathConstants.STRING);

System.out.println(ukTitle);

//获取bookstore下的 book 属性 category 值为 cooking 的 title 的 lang 属性的值

//bookstore->book[category='cooking']-> title -> @lang

String langXpath="/bookstore/book[@category='cooking']/title/@lang";

String langValue = (String)xpath.evaluate(langXpath,doc,XPathConstants.STRING);

System.out.println(langValue);

//获取bookstore节点下的所有book

//bookstore-> book

NodeList books = (NodeList)xpath.evaluate("/bookstore/book",doc,XPathConstants.NODESET);

//开始遍历books

for(inti=0;i<books.getLength();i++){

//获取到book节点

Nodebook = books.item(i);

StringinnerTitle = (String)xpath.evaluate("title/text()",book,XPathConstants.STRING);

System.out.println(innerTitle);

Stringauthor = (String)xpath.evaluate("author/text()",book,XPathConstants.STRING);

System.out.println(author);

}

这是我的xml文件,对比的看更好理解

 

<?xmlversion="1.0" encoding="UTF-8"?>

<bookstore>

<!--

获取bookstore 节点下 book 属性 category 值为 web 下的第二个 title 节点的文本内容

获取bookstore 节点下 book 属性 category 值为 web 的 titile 属性为 en 的节点内容

获取bookstore 下 book 属性 category 值为 cooking 的 title 的 lang 属性的值

-->

<book category="children">

<titlelang="en">Harry Potter</title>

<author>JK. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

<book category="cooking">

<titlelang="en">Everyday Italian</title>

<author>GiadaDe Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<bookcategory="web">

<titlelang="en">Learning XML</title>

<author>ErikT. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

<bookcategory="web">

<titlelang="uk">XQuery Kick Start</title>

<author>JamesMcGovern</author>

<year>2003</year>

<price>49.99</price>

</book>

</bookstore>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值