第⼗⼆天前端XML及解析
⼗六XML
EXtensible Markup Language
XML ⽤来存储和交换数据
⽀持⾃定义标签,可扩展性,区分⼤⼩写
且⾥⾯的标签都是成对的
THML ⽤来显⽰数据
标签都有固定含义,不能去创造新的标签,不区分⼤⼩写
1.前导区
规定了XML页⾯的3个属性
version:表⽰使⽤的XML版本
enconding:页⾯使⽤的⽂字编码
standalone:此XML⽂件是否独⽴运⾏
例:<?xml " version=“1.0” " encoding=“UTF-8” ?>
2.数据区
所有元素都必须有根元素,⼀个根元素可存放多个⼦元素,但要求每⼀个元素必须完结,且区分⼤⼩写
也可加⼊对应的特殊符 例:& & > > < < " " &apos ’
CDATA标记不会进⾏解析,原封不动将原数据传递给应⽤程序 例:<![CDATA[内容是不进⾏解析,原样⼦显⽰]]> 3.优点
独⽴性(独⽴于操作系统,编程语⾔)
灵活性
可扩展性
可交互
4.XML的解析
1.DOM解析
将XML⽂档转换为对象模型的集合即DOM树
DOM解析步骤:1.创建解析器⼯⼚对象
2.由解析器⼯⼚对象创建解析器对象
3.由解析器对象对指定XML⽂件进⾏解析,构建相应的DOM树,创建Document对象
4.以Document对象为起点对DOM树的节点进⾏增删改查操作
核⼼类
1.Document
代表整个 XML ⽂档,表⽰ DOM 树的根,提供了对⽂档中的数据进⾏访问和操作的⼊⼝,Document 节点可以访问 XML ⽂件中所有的元素内容
Document 的常⽤⽅法有:
getElementsByTagName(String):返回⼀个 NodeList 对象,它包含了所有给定标签名字的标签
getDocumentElement():返回⼀个代表这个 DOM 树的根节点的 Element 对象,也就是代表 XML ⽂档根元 素的那个对象
2.Node
此接⼝在整个 DOM 树中具有举⾜轻重的地位,DOM 操作的核⼼接⼝中有很⼤⼀部分接是从 Node 接⼝继承过来的。例如:Document、Element、Attri等接⼝,每⼀个 Node 接⼝代表了 DOM 树中的⼀个节点
NodeList 的常⽤⽅法有:
getLength():返回列表的长度
item(int):返回指定位置的 Node 对象
3.NodeList
此接⼝表⽰的是⼀个节点的集合,⼀般⽤于表⽰有顺序关系的⼀组节点,例如:⼀个节点的⼦节点,当⽂档改变的时候会直接影响到NodeList 集
Node 对象的主要⽅法有:
getChildNodes() 包含此节点的所有⼦节点的 NodeList
getFirstChild() 如果节点存在⼦节点,则返回第⼀个⼦节点
getLastChild() 如果节点存在⼦节点,返回最后⼀个⼦节点
getNextSibling() 返回在 DOM 树中这个节点的下⼀个兄弟节点
getPreviousSibling() 返回在 DOM 树中这个节点的上⼀个兄弟节点
getNodeName() 根据节点的类型返回节点的名称
getNodeValue() 返回节点的值
getNodeType() 返回节点的类型
4.NamedNodeMap
此接⼝表⽰的是⼀组节点和其唯⼀名字对应的⼀⼀对应关系,本接⼝主要⽤于属性节点的表⽰上
5.Element
代表 XML ⽂档中的标签元素
继承⾃ Node 对象最主要的⼦对象
Element 对象的⽅法:
getAttribute(String):返回标签中给定属性名称的属性的值
getElementsByTagName(String):返回具有给定标记名称的所有后代 Elements的 NodeList
使用dom4j解析xml文件
public static void main(String[] args)throws ParserConfigurationException, SAXException, IOException {
File f=new File("l");
DocumentBuilderFactory wInstance();//1.创建解析器⼯⼚对象
DocumentBuilder wDocumentBuilder();//2.由⼯⼚解析器对象创建解析器对象
Document d=db.parse(f);//3.由解析器对象对指定的xml⽂件进⾏解析,构建相应的DOM树,创建Document对象
NodeList ElementsByTagName("VALUE");//3.取得DOM树的节点值
System.out.Length());
for(int i=0;i&Length();i++){  System.out.ElementsByTagName("NO").item(i).getFirstChild().getNodeValue());  System.out.Ele mentsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
}
}
}
2
A1234
airport NCS
B1234
seagate llc
2.jDOM解析
是java语⾔编写易于读、写、操作XML的⼀套组件
jDOM解析步骤:1.建⽴解析器对象
2.将XML⽂档解析为DOM树
3.取得树的根节点元素
4.取得节点下的所有孩⼦节点
5.对集合元素进⾏遍历
public class T03JDOM {
public static void main(String[] args)throws JDOMException, IOException {
SAXBuilder SAXB=new SAXBuilder();//1.创建解析器对象
Document d=SAXB.build(new File("l"));//2.将XML⽂档转换为DOM树
Element RootElement();//3.取得树的根节点元素
List Children();//4.取得根节点下所有孩⼦节点
for(int i=0;i<allChildren.size();i++){//5.对集合元素进⾏遍历
System.out.println(((Element) (i)).getChild("NO").getText());
System.out.println(((Element) (i)).getChild("ADDR").getText());
}
}
}
3.Dom4j解析
⼀组XML操作的组件包,主要⽤来读写XML⽂件,由于DOM4J性能优异、功能强⼤,易⽤性等特点被⼴泛应⽤开
例:Hibernate,Spring框架中使⽤了DOM4j进⾏XML解析
DOM4j解析步骤:1.得到解析器
2.通过解析器解析XML⽂件得到Document对象
3.得到DOM树的根节点
4.使⽤迭代器来遍历节点
public static void main(String[] args)throws DocumentException {
// TODO Auto-generated method stub
File f=new File("l");
SAXReader reader=new SAXReader();//1.得到解析器
Document ad(f);//2.通过解析器解析XML⽂件得到Document对象
Element RootElement();//3.得到DOM树的根节点
Iterator<Element> it=root.elementIterator();//4.使⽤迭代器来遍历节点
while(it.hasNext()){
Element ();
System.out.println(e.elementText("NO"));
System.out.println(e.elementText("ADDR"));
}
}
}
4.SAX解析
在读取⽂档是激活⼀系列事件,推给事件处理器,由处理器完成对⽂档内容的访问
优点:内存消耗下
⽆需为所有节点创建对象
public class T02SAXDOM extends DefaultHandler{
Stack t=new Stack();
@Override
public void characters(char[] ch,int start,int length)
throws SAXException {
String ts=(String) t.peek();// //取出栈顶元素
if(ts.equals("NO")){
System.out.println(new String(ch,start,length));
}
if(ts.equals("ADDR")){
System.out.println(new String(ch,start,length));
}
}
public void startElement(String uri, String localName, String
qName,Attributes attrs){
t.push(qName);//进栈
}
public static void main(String[] args)throws ParserConfigurationException, SAXException, IOException{  SAXParserFactory wInstance();
SAXParser wSAXParser();
T02SAXDOM tReader=new T02SAXDOM();
SAXP.parse(new InputSource("l"), tReader);
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。