首页 > 编程语言 >java读取并解析XML文件的方法有哪些?

java读取并解析XML文件的方法有哪些?

时间:2024-01-29 11:23:55浏览次数:26  
标签:XML xml java 读取 void import public String

XMLStreamReader:

1. DOM(Document Object Model)方式:DOM将整个XML文档加载到内存中,形成一颗树状结构,然后通过操作这个树状结构来获取所需要的数据。示例代码如下:

import javax.xml.parsers.*;
import org.w3c.dom.*;
 
public class XMLParser {
    public static void main(String[] args) throws Exception{
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        
        // 从文件路径或URL创建输入流
        InputStream inputStream = new FileInputStream("path/to/file.xml");
        Document document = builder.parse(inputStream);
        
        Element rootElement = document.getDocumentElement();
        NodeList nodeList = rootElement.getElementsByTagName("tagName");
        
        for (int i=0; i<nodeList.getLength(); i++) {
            Node node = nodeList.item(i);
            
            if (node instanceof Element) {
                Element element = (Element) node;
                
                String attributeValue = element.getAttribute("attributeName");
                String textContent = element.getTextContent();
                
                System.out.println("Attribute Value: " + attributeValue);
                System.out.println("Text Content: " + textContent);
            }
        }
    }
}

2. SAX(Simple API for XML)方式:SAX是基于事件驱动的API,在处理大型XML文件时效果更好。它按行读取XML文件,当发现特定标记时会触发相应的事件处理程序。示例代码如下:

import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
 
public class XMLHandler extends DefaultHandler {
    
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        
        if ("tagName".equalsIgnoreCase(qName)) {
            String attributeValue = attributes.getValue("attributeName");
            System.out.println("Attribute Value: " + attributeValue);
        }
    }
    
    @Override
    public void characters(char ch[], int start, int length) throws SAXException {
        super.characters(ch, start, length);
        
        String content = new String(ch, start, length).trim();
        if (!content.isEmpty()) {
            System.out.println("Text Content: " + content);
        }
    }
    
    public static void main(String[] args) throws Exception {
        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
        XMLReader reader = parser.getXMLReader();
        XMLHandler handler = new XMLHandler();
        reader.setContentHandler(handler);
        
        // 从文件路径或URL创建输入流
        InputSource source = new InputSource("path/to/file.xml");
        reader.parse(source);
    }
}

除了上述两种常用的方式外,还有其他第三方库如JDom、Xerces等也提供了类似功能的API。

参考:百度AI

标签:XML,xml,java,读取,void,import,public,String
From: https://www.cnblogs.com/2008nmj/p/17994115

相关文章

  • pandas高效读取大文件的探索之路
    使用pandas进行数据分析时,第一步就是读取文件。在平时学习和练习的过程中,用到的数据量不会太大,所以读取文件的步骤往往会被我们忽视。然而,在实际场景中,面对十万,百万级别的数据量是家常便饭,即使千万,上亿级别的数据,单机处理也问题不大。不过,当数据量和数据属性多了之后,读取文件的......
  • java冒泡排序的三种实现方法
    第一种通过简单的比较相邻的元素,如果他们的顺序是错误的,则交换它们的位置。重复这个步骤,直到没有更多要交换的元素为止。j变量代表未排序数组范围的右边界,j以后的已经排序publicstaticvoidbubble(int[]nums,intj){if(j==0){return;}......
  • 学习笔记推荐:极客时间《Java常见错误100例》
    最近,我有幸接触了一套非常精彩的学习笔记,《Java常见错误100例》。(手册链接在文末!!!)这套学习笔记出自极客时间,对于想要在Java开发领域深耕细作的朋友们来说,它无疑是一个不可多得的宝藏。接下来,我将结合其内容目录中的一些亮点,为大家进行简要介绍。首先,这套学习笔记囊括了Java......
  • 字符缓冲流读取复制文件、排序文件内容
    1publicstaticvoidmain(String[]args){2try(3//定义字符输入流与文件相通4BufferedReaderbr=newBufferedReader(newFileReader("src/test.txt"));5//定义字符输出流与文件相通6......
  • Java学习日记 Day14
    算法:①二叉搜索树的最近祖先:我用了二叉树最近祖先的同样的方法,没有考虑二叉树的定义。还是先判断当前节点情况,然后做递归调用,判断左右节点的情况。②二叉搜索树添加节点:这个要明白添加的节点一定在最后,所以只要判断节点数值大小,一直递归调用就好。③二叉搜索树删除节点:删除分几......
  • 每日一道面试题:Java中序列化与反序列化
    写在开头哈喽大家好,在高铁上码字的感觉是真不爽啊,小桌板又拥挤,旁边的小朋友也比较的吵闹,影响思绪,但这丝毫不影响咱学习的劲头!哈哈哈,在这喧哗的车厢中,思考着这样的一个问题,Java中的对象是如何在各个方法,或者网络中流转的呢?通过这个问题便引出了我们今天的主人公:序列化与反序列化!......
  • ffmpeg-读取媒体文件信息-avformat_open_input
    实例代码Codeintvideo_audio_info(intargc,char*argv[]){ if(argc<2){ printf("Usage:%smediaFile\n",argv[0]); return-1; } AVFormatContext*ic=NULL; charpath[20]={0}; strcpy(path,argv[1]); //1.打开媒体文件 intret=avfo......
  • IBM java的分析工具(ga和ha)学习和整理
    IBMjava的分析工具(ga和ha)学习和整理背景前几天学习了整理了jca工具今天继续学习一下ga工具ga工具主要是分析gclog相关.可以很直观的进行gclog的分析和展示.除了mat之外还有一个比较轻量级的内存dump分析工具ha.想着一起学习和分析一下.ga工具的相关学习下载:https......
  • 用Java语言实现一个观察者模式
    观察者模式(也被称为发布/订阅模式),提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察的对象分开。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者收到消......
  • perf_event_open 学习 —— 通过read的方式读取硬件技术器
    目录示例程序1单计数器多计数器示例程序2ConfigureasinglecounterConfiguremultiplecounters(nomultiplexing)示例程序1Linuxperf子系统的使用(一)——计数刚刚入职的时候我就研究了perf_event_open()这个巨无霸级别的系统调用,还用Python封装了一层,非常便于获取计数器......