王朝网络
分享
 
 
 

Java XML解析之DOM

王朝学院·作者佚名  2016-05-28  
宽屏版  字体: |||超大  

java xml解析之DOMDOM解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内存中进行解析,因此当XML文件较大时,使用DOM解析效率会降低,而且可能造成内存溢出。当XML文件较大时应采用SAX解析(下一篇中会介绍)。通常情况下,若XML文件只是用作系统的配置文件,文件一般不会很大,使用DOM解析基本就能解决问题。以下分别是解析和生成xml的基本步骤:1. XML解析:上文已经说过DOM解析时是将整个XML文件加载到内存中,所以解析的第一步就是加载文件,需要用到以下代码:1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.parse(in);// 参数有多种类型,在此例中选择的是InputStream类型的参数

这三行代码分别是创建解析器工厂,创建解析器,获取解析的XML文档树,之后就可以对document对象进行具体的操作。

其中的主要操作大概有以下几种:1 Element root = document.getDocumentElement();// 获取文档的根节点2 NodeList nodeList = document.getElementsByTagName("nodename");// 根据节点名称获取节点列表

然后再循环遍历nodeList中的节点,利用节点对象的getChildNodes()的方法获取子节点列表,直到取到所需要的节点。

解析注意点:Dom解析会将xml中两个标签之间的所有内容都看成是子节点,包括空白,其中节点类型分为:1. 带有标签的子节点看成Element类型的子节点2. 不包含标签的空白子节点或者文字节点看成是text类型的子节点获取节点值时,必须获取text类型的节点的值,而不是Element类型节点的值,Element节点的值永远都是null,也可以使用Element节点的getTextContent()来获取Element类型的节点值所以,在遍历子节点时,需要做nodeList.item(i).getNodeType() == Element.ELEMENT_NODE这样的一次判断,若为true,则执行nodeList.item(i).getTextContent()来获取节点的值。2. XML生成:首先是创建一个Document对象,需要用到以下代码:1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.newDocument();

然后是document对象的配置以及节点的创建和添加:

1 document.setXmlStandalone(true); //非必须配置,配置之后可以去除不必要的standalone属性2 Element root = document.createElement("nodes"); // 创建文档根节点3 document.appendChild(root);// 将根节点加入文档中

创建子节点,添加id属性,并加入根节点中,xml中节点的父子关系是通过节点的appendChild方法形成的。

1 Element node = document.createElement("node");// 创建子节点2 node.setAttribute("id", "1"); // 为子节点添加属性3 root.appendChild(node); // 将子节点加入到根节点中

当节点设置完成之后需要将document对象转换成xml文件,需要通过以下代码转换:

1 TransformerFactory factory = TransformerFactory.newInstance(); // 工厂类,用来获取转换对象2 Transformer transformer = factory.newTransformer(); // 获取用于转换的对象3 transformer.setOutputPRoperty(OutputKeys.INDENT, "yes"); // 设置文档自动换行4 transformer.transform(new DOMSource(document), new StreamResult( new File("E:\\nodes.xml")));// 实现转换,需要将转换的源对象与目标文件包装一下

至此,通过DOM完成了XML文件的生成。DOM解析与创建XML的基本步骤也就是以上这么多,这是我学习之后的总结,希望对需要学习这方面知识的朋友能有些许帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有