java读取xml⽂件以及Jsoup解析xml基本介绍
xml基本语法:
4.属性值必须使⽤引号(单双都可以)引起来
5.标签必须正确关闭
组成部分
1.⽂档声明格式:<?xml 属性列表 ?>
version:版本号(必须); encoding:编码格式; standalone:是否独⽴取值:yes,no
2.标签:名称⾃定义,并且按照规则
3.属性:id属性值唯⼀
4.⽂本:CDATA区:在该区域中的数据会被原样展⽰,格式:<![CDATA[ 数据 ]]>
约束:规定xml⽂档的书写规则
dtd:简单的约束技术
schema:复杂的约束技术
DTD:内部dtd:将约束规则定义在xml⽂档中;外部dtd:将约束定义在外部dtd⽂件中
外部dtd:本地:<! DOCTYPE 根标签名 SYSTEM "dtd⽂件的位置">
⽹络:<! DOCTYPE 根标签名 PUBLIC "dtd⽂件名字" "dtd⽂件的位置URL">
java解析xml⽂件的⼏种⽅法
解析xml有两种形式,其分别为:
1. DOM:将标记语⾔⽂档⼀次性加载进内存,在内存中形成⼀颗dom树
优点:操作⽅便,可以对⽂档进⾏CRUD(增删改查)的所有操作
缺点:占内存
2. SAX:逐⾏读取,基于事件驱动
优点:不占内存
缺点:只能读取
以下⾯这个简单的xml⽂件的解析为例,具体内容参考www.w3school/xmldom/dom_parser.asp
<?xml version="1.0" encoding="UTF-8"?>
<peoples>
<people number="1">
<name id="zs">张三</name>
<age>12</age>
</people>
<people>
<name>李四</name>
<age>15</age>
</people>
</peoples>
第⼀种,使⽤DOM对xml进⾏解析
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.File;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
public class testXml {
public static void main(String[] args) {
try{
File xml = new File("l");
DocumentBuilderFactory factory = wInstance();
DocumentBuilder builder = wDocumentBuilder();
Document doc = builder.parse(xml);
NodeList list = ElementsByTagName("people");
for(int i=0;i&Length();i++){
Element e = (Element)list.item(i);
System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()
+"年龄:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
第⼆种形式,DOM4J进⾏解析
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class testDOM4J {
public static void main(String[] args) {
try{
File f = new File("l");
SAXReader reader = new SAXReader();
Document doc = ad(f);
Element root = RootElement();
Element n;
for (Iterator i=root.elementIterator("people");i.hasNext();) {
n = (Element) i.next();
System.out.println("姓名:"+n.elementText("name")+" 年龄:"+n.elementText("age"));
}
}catch(Exception e){
e.printStackTrace();
}
}
}
第三种形式,JDOM进⾏解析
import java.util.*;
import org.jdom2.*;
import org.jdom2.input.*;
import java.io.File;
public class testJDOM {
public static void main(String[] args) {
try{
File f = new File("l");
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(f);
Element e = RootElement();
List li = e.getChildren();
Element temp;
for(int i=0;i<li.size();i++){
temp = (Element) li.get(i);
System.out.println("姓名:"+Child("name").getText()+" 年龄:"+Child("age").getText());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
Jsoup是⼀款Java 的HTML解析器,可直接解析某个URL地址、HTML、XML⽂本内容。它提供了⼀套⾮常省⼒的API,可通过DOM,CSS 以及类似于jQuery的操作⽅法来取出和操作数据。
import org.jsoup.Jsoup;
import des.Document;
import des.Element;
import org.jsoup.select.Elements;
import java.io.File;
public class testJsoup {
public static void main(String[] args) {
try{
//1.获取xml解析⽂件的路径
File f = new File("l");
//2.解析xml⽂档,加载⽂档进内存,获取Jsoup 的document对象
Document document = Jsoup.parse(f,"UTF-8");
//解析xml
Elements elements = ElementsByTag("name");
for(int i=0;i<elements.size();i++){
System.out.println("姓名:"+(i).text());
}
}catch (Exception e){
e.printStackTrace();
}
}
xml标签大全}
其中:
parse⽅法:解析xml或html对象。
Document :⽂档对象。代表内存中的dom树。
获取Element对象:1.根据标签名获取对象集合public Elements getElementsByTag(String tagName)。
2.根据属性名称获取对象集合public Elements getElementsByAttribute(String key)。
3.根据对应的属性名和值获取元素对象集合public Elements getElementsByAttributeValue(String key, String value)
4.根据ID属性获取唯⼀的element public Element getElementById(String id)
Elements :Element对象的集合。可以当作ArrayList来使⽤
Element :元素对象
*获取⼦元素对象
*获取属性值 String attr(String key)
*获取⽂本内容 String text()
Node :节点对象 Document和Element的⽗类
快速查询⽅式
1.selector选择器: 使⽤的⽅法:Elements select(String cssQuery)
2.XPath。使⽤Jsoup的xpath需要额外导⼊jar包。具体可以查询w3cschool参考⼿册
两种⽅法的⽰例代码
1.selector选择器
import org.jsoup.Jsoup;
import des.Document;
import des.Element;
import org.jsoup.select.Elements;
import java.io.File;
public class testJsoup {
public static void main(String[] args) {
try{
//1.获取xml解析⽂件的路径
File f = new File("l");
//2.解析xml⽂档,加载⽂档进内存,获取Jsoup 的document对象
Document document = Jsoup.parse(f,"UTF-8");
//使⽤选择器进⾏查询,查询name标签
Elements elements = document.select("name");
System.out.(0).text());
//根据id进⾏查询
Elements id = document.select("#zs");
System.out.(0).text());
//根据值查
Elements select = document.select("people[number=\"1\"]");
System.out.());
//查people中number等于1中的age⼦标签
Elements select1 = document.select("people[number=\"1\"]>age");
System.out.());
}catch (Exception e){
e.printStackTrace();
}
}
}
2.XPATH
import org.jsoup.Jsoup;
import des.Document;
import des.Element;
import org.jsoup.select.Elements;
import java.io.File;
public class testJsoupXpath {
public static void main(String[] args) {
try{
//1.获取xml解析⽂件的路径
File f = new File("l");
//2.解析xml⽂档,加载⽂档进内存,获取Jsoup 的document对象
Document document = Jsoup.parse(f,"UTF-8");
//剧创建JXDocumnet对象
JXDocument jxDocument=new JXDocument(document);
//结合xpath语法查询
List<JXNode> jxNodes = jxDocument.selN("//people");
System.out.println(jxNodes);
List<JXNode> jxNode = jxDocument.selN("//people[@number='1']"); System.out.println(jxNode);
}catch (Exception e){
e.printStackTrace();
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论