java解析xml文件的几种方式(DOM解析)

好久不用的东西,今天居然被面试官问到了。那既然这样,我们就一起回顾下java解析xml文件的几种方式吧。

DOM解析

dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手。

User.xml文件

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Users name="users">
    <User id="1" name="user1">
        <name>saber</name>
        <age>18</age>
        <sex>女</sex>
        <emal>1426733135@saber.com</emal>
        <a href="www.saber.com">saber的页面</a>
    </User>
    <User id="2" name="user2">
        <name>lader</name>
        <age>19</age>
        <sex>男</sex>
        <emal>1426733135@saber.com</emal>
        <a href="www.saber.com">saber的页面</a>
    </User>

</Users>

获取document文档对象

 private Document document;//声明document 
 public void getDocument(){
        //获取document工厂bean
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder documentBuilder = factory.newDocumentBuilder();
            document = documentBuilder.parse("User.xml");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

获取xml元素

    public void showInfo(){
        NodeList users = document.getElementsByTagName("User");
        for (int i =0;i<users.getLength();i++){
            Element user=(Element) users.item(i);
            NodeList childNodes = user.getChildNodes();
            for (int j = 0;j<childNodes.getLength();j++){
                Node item =  childNodes.item(j);
                System.out.println(item.getTextContent());
            }
            System.out.println("---------------------------");
        }
        NodeList div=document.getElementsByTagName("div");
        NodeList divChildren=div.item(0).getChildNodes();
        System.out.println(divChildren.item(0).getTextContent());
        //或者
       // System.out.println(document.getElementsByTagName("span").item(0).getTextContent());
    }

编辑xml元素

  public void deleteElement(){
        NodeList divs= document.getElementsByTagName("div");
        Node div=divs.item(0);
        //先找到自己的父节点,然后删除指定的子节点
        div.getParentNode().removeChild(div);
        saveXML();
    }
    public void updateElement(){
        Element span=(Element)document.getElementsByTagName("span").item(0);
        span.setAttribute("class","index");
        if(!span.hasAttribute("id")){
            span.setAttribute("id","index");
        }
        span.setTextContent("DOM解析也不过如此");
        saveXML();
    }

对dom元素进行修改后一定得保存修改,也就是使用流将修改的内容重新输出到xml文件中

    public void saveXML(){
        TransformerFactory factory =TransformerFactory.newInstance();
        factory.setAttribute("indent-number",4);//设置缩进4个空格
        try {
            Transformer transformer=factory.newTransformer();
            transformer.setOutputProperty(OutputKeys.ENCODING,"utf-8");//设置字符编码
            transformer.setOutputProperty(OutputKeys.INDENT,"YES");//设置是否支持缩进
            DOMSource domSource=new DOMSource(document);//封装document
            OutputStream out=new FileOutputStream("User.xml");
            StreamResult streamResult=new StreamResult(new OutputStreamWriter(out,"utf-8"));
            transformer.transform(domSource,streamResult);//更新修改
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

DOM4J解析请看下篇文章,java解析xml文件的几种方式(DOM4J解析)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了多种解析XML文件的方法,常见的有以下几种: 1. DOM解析方式:将整个XML文档读入内存中,形成一个树形结构,可以对整个XML文档进行增删改查操作。 2. SAX解析方式:采用事件驱动的方式,逐行解析XML文档,对每个元素进行处理,优点是解析速度快,但不能进行修改操作。 3. JAXB解析方式:通过注解方式Java对象与XML元素进行映射,可以实现Java对象与XML文档的互相转换。 4. StAX解析方式:基于流的方式解析XML文档,可以进行增删改查操作,速度较快,但相对于DOM速度稍慢。 下面是一个使用DOM方式解析XML文档的示例代码: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class XMLParser { public static void main(String argv[]) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("student"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\nCurrent Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no : " + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent()); System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent()); System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent()); System.out.println("Marks : " + eElement.getElementsByTagName("marks").item(0).getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码使用DOM方式解析XML文档,首先将XML文件读入内存中,然后通过getNodeName()、getAttribute()、getElementsByTagName()等方法获取XML元素的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值