java 解析xml文件_Java解析XML文件的常用方法介绍

这篇博客演示了如何使用Java的DOM解析器操作XML文件,包括读取XML文档中特定标签的属性值,向XML文件添加新元素,修改已有元素,以及删除元素。主要涉及DocumentBuilderFactory、DocumentBuilder、Element等类的方法。
摘要由CSDN通过智能技术生成

1 importjava.io.IOException;2

3 importjavax.xml.parsers.DocumentBuilder;4 importjavax.xml.parsers.DocumentBuilderFactory;5 importjavax.xml.parsers.ParserConfigurationException;6 importjavax.xml.transform.Transformer;7 importjavax.xml.transform.TransformerConfigurationException;8 importjavax.xml.transform.TransformerException;9 importjavax.xml.transform.TransformerFactory;10 importjavax.xml.transform.dom.DOMSource;11 importjavax.xml.transform.stream.StreamResult;12

13 importorg.w3c.dom.Document;14 importorg.w3c.dom.Element;15 importorg.w3c.dom.Node;16 importorg.w3c.dom.NodeList;17 importorg.xml.sax.SAXException;18

19 public classDOM {20

21 public static voidmain(String[] args) {22 //TODO Auto-generated method stub

23 try{24 DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();25 //创建DOM解析器工厂

26 DocumentBuilder db =dbf.newDocumentBuilder();27 //调用DOM解析器工厂的newDocumentBuilder()方法得到DOM解析器对象

28 Document doc = db.parse("src\\name.xml");29 //调用DOM解析器对象parse(String uri)方法得到Document对象

30 NodeList nl = doc.getElementsByTagName("name");31 //调用Document对象的getElementsByTagName(String tagname)方法得到NodeList对象

32 /*

33 * 遍历XML中的元素34 */

35 for (int i = 0; i < nl.getLength(); i++) {36 Node node =nl.item(i);37 //通过NodeList的item(int index)方法得到NodeList中的Node对象

38 Element element =(Element) node;39 //通过Node对象强制转换的方法得到Element对象

40 String id = element.getAttribute("id");41 //通过Element对象的getgetAttribute(String name)方法得到id属性值

42 System.out.println(id);43 //打印id属性值

44 String age = element.getElementsByTagName("age").item(0).getTextContent();45 //通过Element对象的getElementsByTagName(String name)方法得到age的属性值

46 System.out.println(age);47 //打印age

48 }49 /*

50 * 添加元素到XML中51 */

52 Element root =doc.getDocumentElement();53 //通过Document对象的getDocumentElement()方法得到根节点

54 Element newname = doc.createElement("name");55 //通过Document对象的createElement(String tagName)方法得到新的name元素

56 newname.setAttribute("id", "小明");57 //通过调用Element对象的setAttribute(String name,String value)方法为id赋值

58 Element newage = doc.createElement("age");59 //通过Document对象的createElement(String tagName)方法得到新的age元素

60 newage.setTextContent("18");61 //通过调用Element对象的setTextContent(String textContent)方法为age赋值

62 newname.appendChild(newage);63 //添加age到name中

64 root.appendChild(newname);65 //添加name到根节点中

66 /*

67 * 修改XML中的元素68 */

69 for (int i = 0; i < nl.getLength(); i++) {70 Element fixname =(Element) nl.item(i);71 //得到要修改的Element对象

72 String fixnewname = fixname.getAttribute("id");73 //获取到要修改对象的id属性值

74 /*

75 * 判断name是否为要修改的对象76 */

77 if (fixnewname.equals("小明")) {78 Element sex = doc.createElement("sex");79 //创建新的Element对象

80 sex.setAttribute("sex", "男");81 //给新的Element对象的属性赋值

82 fixname.appendChild(sex);83 //添加新的Element(sex)对象到Element(fixname)对象中

84 }85 }86 /*

87 * 删除XML中的元素88 */

89 root.removeChild(root.getChildNodes().item(7));90 //首先通过根节点访问子节点,得到Node对象,然后调用根节点的removeChild(Node oldChild)方法删除元素

91 /*

92 * 将更改写入到XML文件中93 */

94 TransformerFactory tf =TransformerFactory.newInstance();95 //调用TransformerFactory的newInstance()方法得到TransformerFactory对象

96 Transformer t =tf.newTransformer();97 //调用TransformerFactory对象的newTransformer()方法得到Transformer对象

98 t.transform(new DOMSource(doc), new StreamResult("src\\name.xml"));99 //调用Transformer对象的transform(Source xmlSource,Result100 //outputTarget)方法将修改写入到name.xml文件中

101 } catch(ParserConfigurationException e) {102 //TODO Auto-generated catch block

103 e.printStackTrace();104 } catch(SAXException e) {105 //TODO Auto-generated catch block

106 e.printStackTrace();107 } catch(IOException e) {108 //TODO Auto-generated catch block

109 e.printStackTrace();110 } catch(TransformerConfigurationException e) {111 //TODO Auto-generated catch block

112 e.printStackTrace();113 } catch(TransformerException e) {114 //TODO Auto-generated catch block

115 e.printStackTrace();116 }117 }118

119 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值