Java读取XML

Java自带的工具包java.xml提供了多种方法如:DOM解析、SAX解析和StAX解析,这三种经典的方式。

一、DOM解析

DOM分析是在内存中读取XML文件,形成“对象树”,每一个元素、属性、文字等都会成为一个节点,然后可以随意添加、删除和检查这些节点。

此外,DOM分析还可以支持XML文档中的任何复杂级操作,包括修改XML内容和结构。但如果XML文件过大,DOM分析就会占用大量的内存。

importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.DocumentBuilder;
importorg.w3c.dom.Document;
importorg.w3c.dom.NodeList;
importorg.w3c.dom.Node;
importorg.w3c.dom.Element;
importjava.io.File;

try{
FileinputFile=newFile("input.txt");
DocumentBuilderFactorydbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilderdBuilder=dbFactory.newDocumentBuilder();
Documentdoc=dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
System.out.println("Rootelement:"+doc.getDocumentElement().getNodeName());
NodeListnList=doc.getElementsByTagName("student");
System.out.println("----------------------------");

for(inttemp=0;temp<nList.getLength();temp++){
NodenNode=nList.item(temp);
System.out.println("\nCurrentElement:"+nNode.getNodeName());

if(nNode.getNodeType()==Node.ELEMENT_NODE){
ElementeElement=(Element)nNode;
System.out.println("Studentrollno:"+eElement.getAttribute("rollno"));
System.out.println("FirstName:"+eElement.getElementsByTagName("firstname").item(0).getTextContent());
System.out.println("LastName:"+eElement.getElementsByTagName("lastname").item(0).getTextContent());
}
}
}catch(Exceptione){
e.printStackTrace();
}

二、SAX解析

SAX分析是一种基于事件的分析方法,不需要将XML文件加载到内存中。而是一边扫描一边分析,适合大型文件的分析。

但SAX分析只能进行只读操作,不支持写入操作。另外,它不保存XML文档的状态,一旦开始分析,就无法追溯。

importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;

importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;
importjava.io.IOException;

publicclassReadXMLFile{

publicstaticvoidmain(Stringargv[]){

try{

SAXParserFactoryfactory=SAXParserFactory.newInstance();
SAXParsersaxParser=factory.newSAXParser();

DefaultHandlerhandler=newDefaultHandler(){
booleanbfname=false;
booleanbsalary=false;

publicvoidstartElement(Stringuri,StringlocalName,StringqName,
Attributesattributes)throwsSAXException{
if(qName.equalsIgnoreCase("FIRSTNAME")){
bfname=true;
}
if(qName.equalsIgnoreCase("SALARY")){
bsalary=true;
}
}
};
saxParser.parse("c:\\file.xml",handler);

}catch(ParserConfigurationException|SAXException|IOExceptione){
e.printStackTrace();
}

}
}

三、StAX解析

StAX提供了一种基于流的XML分析方法,它允许程序员在分析过程中决定分析这些数据,这使得它在处理大量数据时更有效率。

API解析提供了两种API解析。:用于随机访问的CursorAPI,用于处理XML事件的EventIteratorAPI。

importjavax.xml.stream.XMLInputFactory;
importjavax.xml.stream.XMLStreamConstants;
importjavax.xml.stream.XMLStreamReader;
importjava.io.FileNotFoundException;
importjava.io.FileReader;

publicclassStaxParser{
publicstaticvoidmain(String[]args){
booleanbFirstName=false;
booleanbLastName=false;
booleanbNickName=false;
try{
XMLInputFactoryfactory=XMLInputFactory.newInstance();
XMLStreamReaderreader=
factory.createXMLStreamReader(newFileReader("C:\\file.xml"));

while(reader.hasNext()){
intevent=reader.next();
switch(event){
caseXMLStreamConstants.START_ELEMENT:
if("firstname".equals(reader.getLocalName())){
bFirstName=true;
}elseif("lastname".equals(reader.getLocalName())){
bLastName=true;
}elseif("nickname".equals(reader.getLocalName())){
bNickName=true;
}
break;

caseXMLStreamConstants.CHARACTERS:
if(bFirstName){
System.out.println("FirstName:"+
reader.getText());
bFirstName=false;
}elseif(bLastName){
System.out.println("LastName:"+
reader.getText());
bLastName=false;
}elseif(bNickName){
System.out.println("NickName:"+
reader.getText());
bNickName=false;
}
break;

caseXMLStreamConstants.END_ELEMENT:
break;
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.beidandianzhu.com/g/1144.html

(0)
小蓝的头像小蓝
上一篇 2024-12-17
下一篇 2024-12-17

相关推荐

  • 用Python分析价值用户

    本文将从多个方面详细阐述如何使用Python分析价值用户,帮助企业实现以用户为中心的数据分析。 一、数据收集 1.1 客户关系管理系统 企业通常会使用客户关系管理(CRM)系统来记…

    程序猿 2024-12-23
  • Python爬虫程序下载用法介绍

    本文将从多个方面详细阐述Python爬虫程序下载的相关内容。 一、准备工作 在编写Python爬虫程序之前,我们首先需要安装Python环境和相关的库。以下是一个简单的示例代码: …

    程序猿 2024-12-17
  • Python中字符串转float

    在Python中,字符串转换为浮点数是一种常见的操作。本文将从多个方面详细讲解Python中字符串转换为float类型的方法和注意事项。 一、基本方法 1、使用float()函数进…

    程序猿 2024-12-17
  • Python我爱你小程序

    Python是一种功能强大的编程语言,被广泛用于软件开发、数据分析和人工智能等领域。本文将介绍一个名为“我爱你”的Python小程序,通过多个方面展示Python的魅力。 一、简介…

    程序猿 2024-12-17
  • Python源码图片

    Python源码图片是一个以源代码形式展示的图片,展示的是Python程序的实际代码。在本文中,我们将从多个方面对Python源码图片进行详细的阐述。 一、源码图片的作用 Pyth…

    程序猿 2024-12-28
  • Python跨文件导入

    在本文中,我们将详细讨论Python跨文件导入的问题。 一、Python模块 Python中的模块是一种可重用的代码组织方式,它可以将相关的代码放在一个文件中,供其他程序引用和调用…

    程序猿 2024-12-28
  • 里的Python文件夹在哪里?

    里的Python文件夹是在当前目录下的一个子目录,用于存放Python代码和脚本文件。 一、Python文件夹的创建 1、可以使用Python内置的os模块来创建文件夹,首先需要导…

    程序猿 2024-12-22
  • Python实现词云下载

    词云是一种可视化技术,根据文本中词语出现的频率和重要性,以不同字号、颜色等方式呈现为图形。Python提供了丰富的库和工具,使得实现词云下载变得非常简单。 一、安装所需库 在使用P…

    程序猿 2024-12-22
  • Python中的注释行和注释块

    注释在编程中是非常重要的,它能够为代码添加解释和说明,使其更易于理解和维护。Python中的注释行和注释块是两种常用的注释方式,本文将从多个方面对其进行详细阐述。 一、注释行 注释…

    程序猿 2024-12-22
  • Python显示没有注释器

    Python是一种高级编程语言,以其简洁的语法和强大的功能而受到开发者们的青睐。尽管在一般情况下,我们都会在代码中添加注释以提高代码的可读性和可维护性。但是,Python也允许我们…

    程序猿 2024-12-21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部