欢迎访问宙启技术站
智能推送

XML解析函数——在Java中读取和操作XML文件的方法

发布时间:2023-10-25 21:54:54

在Java中,我们可以使用一些库来解析XML文件,最常用的是DOM(Document Object Model)和SAX(Simple API for XML)解析器。

DOM解析器是一种基于树结构的解析器,它将整个XML文档加载到内存中,然后以树状结构进行操作。下面是一个使用DOM解析器读取和操作XML文件的示例代码:

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[] args) {
        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");
            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                System.out.println("
Current 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();
        }
    }
}

上述代码中,我们首先创建一个File对象,指定要解析的XML文件。然后,我们使用DocumentBuilderFactoryDocumentBuilder来创建一个Document对象,最后使用parse()方法将XML文件解析为Document对象。

接下来,我们通过调用getDocumentElement()方法获取文档的根元素,并使用normalize()方法对其进行标准化处理。

然后,我们使用getElementsByTagName()方法获取名为"student"的元素的列表,遍历列表并打印出每个学生的信息。

SAX解析器是事件驱动的解析器,它按顺序读取XML文件,然后触发一些事件来处理XML节点。下面是一个使用SAX解析器读取和操作XML文件的示例代码:

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;

public class XMLParser extends DefaultHandler {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.xml");
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            XMLParser handler = new XMLParser();
            saxParser.parse(inputFile, handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
        if (qName.equals("student")) {
            System.out.println("
Current Element :" + qName);
            System.out.println("Student roll no : " + attributes.getValue("rollno"));
        }
    }

    @Override
    public void characters(char ch[], int start, int length) throws SAXException {
        System.out.println("Value : "+ new String(ch, start, length));
    }
}

上述代码中,我们首先创建一个File对象,指定要解析的XML文件。然后,我们使用SAXParserFactorySAXParser来创建一个SAX解析器,并指定一个DefaultHandler实例来处理XML节点的事件。

startElement()方法中,我们根据当前节点的名称检查是否是学生节点,如果是,则打印出学生的roll number。

characters()方法中,我们打印出节点的值。

以上就是使用DOM和SAX解析器在Java中读取和操作XML文件的方法。你可以根据自己的需求选择合适的解析器。