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

解析XML文件并提取数据的Java函数

发布时间:2023-07-04 12:53:28

解析XML文件并提取数据可以使用Java中的各种XML解析库来实现,比较常用的有DOM、SAX和JDOM等。

1. DOM解析:DOM解析是一种基于树结构的解析方式,适用于小型XML文件。可以使用Java中提供的javax.xml.parsers包中的DocumentBuilderFactory和DocumentBuilder类进行DOM解析。

示例代码如下:

   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;
   
   public class DOMParser {
       public static void main(String[] args) {
           try {
               // 创建DocumentBuilderFactory对象
               DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
               // 创建DocumentBuilder对象
               DocumentBuilder builder = factory.newDocumentBuilder();
               // 通过DocumentBuilder对象的parse方法将XML文件解析为Document对象
               Document document = builder.parse("file.xml");
               // 获取根节点
               Element root = document.getDocumentElement();
               // 获取子节点列表
               NodeList nodeList = root.getElementsByTagName("item");
               // 遍历子节点列表
               for (int i = 0; i < nodeList.getLength(); i++) {
                   Node node = nodeList.item(i);
                   if (node.getNodeType() == Node.ELEMENT_NODE) {
                       Element element = (Element) node;
                       // 提取数据
                       String name = element.getElementsByTagName("name").item(0).getTextContent();
                       String value = element.getElementsByTagName("value").item(0).getTextContent();
                       System.out.println("Name: " + name);
                       System.out.println("Value: " + value);
                   }
               }
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
   

2. SAX解析:SAX解析是一种基于事件驱动的解析方式,适用于大型XML文件。可以使用Java中提供的javax.xml.parsers包中的SAXParser类和DefaultHandler类进行SAX解析。

示例代码如下:

   import javax.xml.parsers.SAXParser;
   import javax.xml.parsers.SAXParserFactory;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.DefaultHandler;
   
   public class SAXParserExample {
       public static void main(String[] args) {
           try {
               // 创建SAXParserFactory对象
               SAXParserFactory factory = SAXParserFactory.newInstance();
               // 创建SAXParser对象
               SAXParser saxParser = factory.newSAXParser();
               // 创建自定义的DefaultHandler对象
               DefaultHandler handler = new DefaultHandler() {
                   boolean bName = false;
                   boolean bValue = false;
                   
                   // 开始解析元素时触发
                   public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
                       if (qName.equalsIgnoreCase("name")) {
                           bName = true;
                       }
                       if (qName.equalsIgnoreCase("value")) {
                           bValue = true;
                       }
                   }
                   
                   // 结束解析元素时触发
                   public void endElement(String uri, String localName,String qName) throws SAXException {
                   }
                   
                   // 解析元素值时触发
                   public void characters(char ch[], int start, int length) throws SAXException {
                       if (bName) {
                           System.out.println("Name: " + new String(ch, start, length));
                           bName = false;
                       }
                       if (bValue) {
                           System.out.println("Value: " + new String(ch, start, length));
                           bValue = false;
                       }
                   }
               };
               // 通过SAXParser对象的parse方法将XML文件解析为Document对象
               saxParser.parse("file.xml", handler);
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
   

3. JDOM解析:JDOM是一个第三方的XML解析库,提供了一种更方便的方式来解析XML文件。可以使用maven将JDOM库添加到项目依赖。

示例代码如下:

   import org.jdom2.Document;
   import org.jdom2.Element;
   import org.jdom2.JDOMException;
   import org.jdom2.input.SAXBuilder;
   
   public class JDOMParser {
       public static void main(String[] args) {
           try {
               // 创建SAXBuilder对象
               SAXBuilder saxBuilder = new SAXBuilder();
               // 通过SAXBuilder对象的build方法将XML文件解析为Document对象
               Document document = saxBuilder.build("file.xml");
               // 获取根元素
               Element root = document.getRootElement();
               // 获取子元素列表
               List<Element> itemList = root.getChildren("item");
               // 遍历子元素列表
               for (Element item : itemList) {
                   // 提取数据
                   String name = item.getChildText("name");
                   String value = item.getChildText("value");
                   System.out.println("Name: " + name);
                   System.out.println("Value: " + value);
               }
           } catch (JDOMException | IOException e) {
               e.printStackTrace();
           }
       }
   }
   

以上三种解析方式均可以根据XML文件的结构和需求进行选择和使用。需要注意的是,需要根据实际情况进行异常处理,以处理解析过程中的异常情况。另外,要根据XML文件的具体格式修改代码中的解析逻辑。