JAVAWEB第五天xml解析
来源:互联网 发布:it机房温湿度标准 编辑:程序博客网 时间:2024/06/05 16:32
一、xml解析简介方式
有两种方式:(1)DOM(2)sax
(1)根据xml的层级结构在内存中分布一个树形结构,把xml的标签、属性、文本都封装成对象。优点:便于增删改操作。缺点:如果文件过大,会造成内存溢出。
(2)采用事件驱动的方式,边读边解析,从上到下,一行一行的解析,解析到某一个对象,返回对象名称。缺点:不能实现增删改操作。优点:查询方便,不会出现内存溢出
二、xml解析开发包
1.sun公司提供的JXSP
2.开源组织提供的Dom4j
三、jaxp是JAVASE的一部分,他的解析器在java.xml.parses包中,包中有4个类是关于dom和sax解析的
1.关于dom的:DoucumentBuilder:解析器类
DocumentBuilderFactory:解析器工厂
2.关于sax的:SAXParser:解析器类
SAXParserFactory:解析器工厂
四、详解有关dom解析器类
1.DoucumentBuilder:解析器类,是抽象类,不能够new,可以通过DocumentBuilderFactory.newDocumentBuilder();方法来获取,
2.DocumentBuilderFactory:解析器工厂,这个类也是抽象类,需要通过newInstance()获取DocumentBuilderFactory的实例。
3.解析时通过一个方法:parse(“xml路径”),返回一个document整个文档,返回的document是一个借口,他的父接口是Node,如果方法在document里找不到,可以到Node里寻找。
4.在document里面方法和js中的很多类似
getElementByTagName("标签名称");//得到标签名称creatElement();创建标签creatTextNode();创建文本appendChild();添加节点removeChild();删除节点getParentNode();获取当前节点的父节点getTextContent();得到标签里的值
对于getElementByTagName()返回是一个NodeList,其中他有两个方法,一个是getlength();获取这个集合的长度,另一个是item(idenx),通过下标获取具体的值。
遍历(这是JAVA代码,不是js)假如NodeList名称为listfor(int i=0;i<list.getlength();i++){ list.item(i);}
五、jaxp实现查询操作
步骤及案例
Person.xml
<?xml version="1.0" encoding="UTF-8"?><person> <p1> <name>zhangsan</name> <age>20</age> </p1> <p1> <name>lisi</name> <age>30</age> </p1></person>
Test.java
public class Test { public static void main(String[] args) throws Exception { //查询所有name元素的值 /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析解析器返回document * 4.得到所有的name元素 * 5.遍历集合 */ DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFactory.newDocumentBuilder(); Document document=builder.parse("src/Person.xml"); NodeList list=document.getElementsByTagName("name"); for(int i=0;i<list.getLength();i++){ Node name=list.item(i); //得到name的值 name.getTextContent(); System.out.println(name); } }}
六、使用jaxp添加节点
所有步骤和js中类似,最主要的一步是:回写到文件里,因为根据dom解析的特点,他是在内存中操作的,所以文件里不会存在,所以要回写到文件中,要在main方法中调用该方法才起作用
public static void selectsin() throws Exception { DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFactory.newDocumentBuilder(); Document document1=builder.parse("src/Person.xml"); NodeList list=document1.getElementsByTagName("p1"); Node p1=list.item(0); Element sex1=document1.createElement("sex"); Text text1=document1.createTextNode("nv"); sex1.appendChild(text1); p1.appendChild(sex1); //回写 TransformerFactory formerFactory=TransformerFactory.newInstance(); Transformer transformer=formerFactory.newTransformer(); //transform("xmlsource","result");方法,将xmlsource转换为result //DOMSource domsource=new DOMSource(document1); //StreamResult streamresult=new StreamResult("src/Person.xml"); transformer.transform(new DOMSource(document1), new StreamResult("src/Person.xml")); }
七、修改sex
直接获取sex以后,使用setTextContent(“要修改为的值”);然后再回写到xml中
八、删除
获取父节点,通过父节点进行删除,然后回写到xml中
Node p1=list.item(0);p1.removeChild("name");
九、遍历
private static void list1(Node node) { if(node.getNodeType()==Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); } //得到第一层子节点 NodeList list=node.getChildNodes(); for(int i=0;i<list.getLength();i++){ Node node1=list.item(i); //得到name的值 list1(node1); } }}
- JAVAWEB第五天xml解析
- JAVAWEB第五天XML简介及语法
- JavaWeb基础学习第五天
- 黑马第五天之Sax解析XML文档和Dom4J解析XML文档
- 方立勋JavaWeb学习笔记第五天
- JavaWeb-XML解析
- JavaWeb - XML解析 - DOM
- JavaWeb - XML解析 - SAX
- JavaWeb - XML解析 - JDOM
- JavaWeb - XML解析 - DOM4J
- Javaweb Dom4j解析XMl
- javaWeb之XML解析
- 传智播客168期JavaEE就业班(第五天 xml约束与解析)
- javaweb-xml解析&json解析
- 基础加强第五天 XML练习
- .NET基础加强第五天(XML文档)
- UI第十五天:XML、JSON数据结构解析
- 【javaWeb第五天】-密码学基础和tomcat的https连接器
- <转载>eclipse:更改tomcat端口号方法
- 获取Tomcat部署路径的方法
- QT之paintEvent事件
- xftp上传文件状态错误
- Linux下一键安装禅道
- JAVAWEB第五天xml解析
- Hibernate中管理实务的注意事项。
- C语言工具宏
- 惊呆了,2000行代码搞定特斯拉
- CoordinatorLayout的使用如此简单
- Python广度优先搜索得到两点间最短路径
- 麦肯锡用 160 页报告告诉我们:13 年后 8 亿人的饭碗会被机器人抢了
- 7、cp,mv,rm,alias,通配符,快捷键,重定向,wc,cut,排序,去重
- 分享点自己搜集的前端有用的链接