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

Java函数库中如何解析XML格式的数据

发布时间:2023-11-18 10:23:06

在Java中,可以使用许多方式来解析XML格式的数据。下面是一些常用的方法:

1. 使用DOM解析器:

DOM(文档对象模型)解析器将XML文档加载到内存中,然后按照树形结构进行解析。通过节点访问和操作XML文件的不同部分。以下是一个简单的示例代码:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

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();
        }
    }
}

2. 使用SAX解析器:

SAX(简单API for XML)解析器是基于事件驱动的解析器。当解析器遇到XML事件(如节点的开始和结束标记)时,会触发定义的处理方法。以下是一个简单的示例代码:

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import java.io.*;

class SAXParserDemo extends DefaultHandler{

  public static void main(String[] args) {

    try {
         File inputFile = new File("input.xml");
         SAXParserFactory factory = SAXParserFactory.newInstance();
         SAXParser saxParser = factory.newSAXParser();
         SAXParserDemo userhandler = new SAXParserDemo();
         saxParser.parse(inputFile, userhandler);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   @Override
   public void startElement(String uri,
   String localName, String qName, Attributes attributes)
      throws SAXException {

      System.out.println("Start Element :" + qName);

      if(attributes.getLength() > 0){
         System.out.println("Attribute Name and Value :");

         for(int i = 0 ; i < attributes.getLength(); i++) {
            System.out.println(attributes.getQName(i)
               + " = " + attributes.getValue(i));
         }
      }
   }

   @Override
   public void endElement(String uri,
   String localName, String qName)
      throws SAXException {
      System.out.println("End Element :" + qName);
   }

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

这是如何使用DOM和SAX解析器解析XML数据的两种常见方法。使用哪种方法取决于您的需求和偏好。此外,还可以使用像JAXB和StAX这样的其他库解析XML数据。无论您选择哪种方法,Java已经提供了广泛的函数库来解析并操作XML格式的数据。