xml相关内容

XML-可扩展标记语言
1、扩展名是.xml
2、内部有很多自定义标签
3、注释<!== 注释内容 ==>
4、<?xml version="1.0" encoding="UTF-8" ?>
5、每一个标签都有开标签和关标签
6、标签不能错位嵌套
7、只有一个根节点
8、每个节点都有一个父节点(根节点除外)
9、每个节点都有0-多个子节点。

XML一般有2种用途
1、配置文件是XML格式的
2、前后台交互通过XML格式的字符串进行交互。(需要前后台约定好标签名都是啥)

XML解析有2种
DOM:读入整个XML,解析成Document文档,Document里包含了Node、Attr等信息。这些类型一定与我们想要的类型不一致。Ticket、Order,需要我们自己从Document中提取信息,封装到我们自己的类中。
DOM的优点:解析简单。缺点:占内存多。

SAX:一次读入一行XML,基于事件的处理机制。分为开始解析文档,开始解析标签,读到内容,结束解析标签,结束解析文档。
SAX解析的优点:省内存,缺点:需要自己控制解析过程。

DOM的代码实现

第一步:
要创建Document
但是Document是一个接口,没有办法创建对象。我们说的创建对象,指的是创建接口的实现类对象。
通过DocumentBuilder获取Document对象。
但是DcoumentBuilder是抽象类,不能创建对象。
DocumentBuilderFactory类可以帮你获得DocumentBuilder对象。

DoucmentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newInstance();
Document doc = db.parse(“src\students.xml”);//解析完成,结果放在了doc里。

NodeList list = doc.getElementsByTagName(“Student”);
for(int i = 0; i < list.getLength(); i++){
Node student= list.item(i);
Attribute id = student.attributes().getNameItem(“id”);
String idStr = id.getNodeValue();

NodeList children = student.childNodes();
Node name = children.item(0);
String str = name.getTextContent();//获取节点的文本内容,如果不是叶子节点,会把子节点的内容一起得到。

}

SAX解析:
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParer sp = spf.newInstance();

Handler hd = new Handler();
sp.parse("src\\students.xml",hd);

public class Handler extends DefaultHandler{

startDocument
endDocument
startElement
endElement
character

}

我不爱使用DOM解析?
因为占内存多,解析不了大文件。
而且从doc中提取信息的时候也麻烦。
我也不在用SAX解析?
因为要自己写解析过程。

dom4j可以解决你的烦恼。
dom4j是第三方提供的jar包。
dom4j的一个组织,它编写的DOM4j框架。而且是市面上最优秀的XML解析框架。性能非常好,超越原生的解析以及各大公司提供的解析框架。
使用起来也非常方便。

使用dom4j的步骤:
1、导包
2、使用
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("路径"));
3、先获取rootElement
Element root = doc.getRootElement();

List<Element> list1 = root.elements();//获取root的所有子节点
List<ELement> list2 = root.elements("student");//获取root下所有叫student的节点。
Element ele = root.element("student");//获取root下叫student的单个元素
Attribute att = ele.attribute("id");//获取ele中名为id的属性。
String id = att.getText();//读取属性的值
String value = ele.getText();//读取元素的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值