首页编程java编程java解析xml什么用,java中xml有什么作用,用在什么地方

java解析xml什么用,java中xml有什么作用,用在什么地方

编程之家2023-10-1194次浏览

很多朋友对于java解析xml什么用和java中xml有什么作用,用在什么地方不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

java解析xml什么用,java中xml有什么作用,用在什么地方

java XML解析详解

(I)Java通过DOM解析XML

1>得到DOM解析器的工厂实例

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();

java解析xml什么用,java中xml有什么作用,用在什么地方

得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂

2>从DOM工厂获得DOM解析器

DocumentBuilder dombuilder=domfac.newDocumentBuilder();

java解析xml什么用,java中xml有什么作用,用在什么地方

通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器

3>把要解析的XML文档转化为输入流,以便DOM解析器解析它

InputStream is=new FileInputStream("bin/library.xml");

InputStream是一个接口。

4>解析XML文档的输入流,得到一个Document

Document doc=dombuilder.parse(is);

由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的

5>得到XML文档的根节点

Element root=doc.getDocumentElement();

在DOM中只有根节点是一个org.w3c.dom.Element对象。

6>得到节点的子节点

NodeList books=root.getChildNodes();

for(int i=0;i<books.getLength();i++){

Node book=books.item(i);

}

这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法,后面有介绍

7>取得节点的属性值

String email=book.getAttributes().getNamedItem("email").getNodeValue();

System.out.println(email);

注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE

8>轮循子节点

for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){

if(node.getNodeType()==Node.ELEMENT_NODE){

if(node.getNodeName().equals("name")){

String name=node.getNodeValue();

String name1=node.getFirstChild().getNodeValue();

...

if(node.getNodeName().equals("price")){

String price=node.getFirstChild().getNodeValue();

...

Java通过SAX解析XML

Simple API for XML(简称SAX)是个循序存取XML的解析器API。

一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括:

XML文字节点

XML元素节点

XML处理指令

XML注释

Java代码

<person>

<user>

<username>谢成志</username>

<password>6626310xie</password>

<sex>男</sex>

<birthday>1988/11/28</birthday>

<headpic>

<pictitle>ermao</pictitle>

<picurl>images/head1.jpg</picurl>

</headpic>

</user>

</person>

此为下面即将解析度简单xml结构,并将其封装成一个User对象。

////////////////////////////////////////////////////////////////////////////////////

Java代码

<span style="font-family: courier new,courier; font-size: small;">package com.xcz.xml;

import java.io.File;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.xcz.util.SaxUtil;

public class Sax4XML{

public static void main(String[] args){

try{

//1.获取factory

SAXParserFactory factory= SAXParserFactory.newInstance();

//2.获取parser

SAXParser parser= factory.newSAXParser();

//3.获取解析时的监听器对象

SaxUtil su= new SaxUtil();

//4.开始解析

parser.parse(new File("src/user-params.xml"), su);

System.out.println(su.getUser());

} catch(ParserConfigurationException e){

e.printStackTrace();

} catch(SAXException e){

e.printStackTrace();

} catch(IOException e){

e.printStackTrace();

}

}

}

</span>

////////////////////////////////////////////////////////////////////////////////////

Java代码

<span style="font-family: courier new,courier; font-size: small;">package com.xcz.util;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import com.xcz.po.HeadPic;

import com.xcz.po.User;

/**

*定义xml解析时的监听类

*

*实现方式有很多,可以实现接口:ContentHandler,DTDHandler, EntityResolver和 ErrorHandler

*但我们常用的继承:DefaultHandler

*/

public class SaxUtil extends DefaultHandler{

private User user;

private HeadPic headPic;

private String content;

private SimpleDateFormat sdf= new SimpleDateFormat("yyyy/MM/dd");

@Override

public void characters(char[] ch, int start, int length)

throws SAXException{

content= new String(ch, start, length);

}

//当解析到文本开始时触发

@Override

public void startDocument() throws SAXException{

super.startDocument();

}

//当解析到文本结束时触发

@Override

public void endDocument() throws SAXException{

super.endDocument();

}

//当解析到元素开始时触发

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException

{

if("user".equals(name))

{

user= new User();

}

if("headpic".equals(name))

{

headPic= new HeadPic();

}

}

//当解析到元素结束时触发

@Override

public void endElement(String uri, String localName, String name)

throws SAXException

{

if("username".equals(name))

{

user.setUsername(content);

}

if("password".equals(name))

{

user.setPassword(content);

}

if("sex".equals(name))

{

user.setSex(content);

}

if("birthday".equals(name))

{

try{

user.setBirthday(sdf.parse(content));

} catch(ParseException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if("pictitle".equals(name))

{

headPic.setPicTitle(content);

}

if("picurl".equals(name))

{

headPic.setPicUrl(content);

user.setHeadPic(headPic);

}

}

public User getUser(){

return user;

}

}</span>

[优点]

(1).节约内存开销

SAX解析器在某些方面优于DOM风格解析器,因为SAX解析器的内存使用量一般远低于DOM解析器使用量。DOM解析器在任何处理开始之前,必须将xml以整棵树放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小。相对来说,SAX解析器的内存内容,是只基于XML档案的最大深度(XML树的最大深度)和单一XML项目上XML属性储存的最大资料。

(2)解析速度快

因为SAX事件驱动的本质,处理文件通常会比DOM风格的解析器快。

[缺点]

SAX事件驱动的模型对于XML解析很有用,但它确实有某些缺点。

某些种类的XML验证需要存取整份文件。例如,一个DTD IDREF属性需要文件内有项目使用指定字串当成DTD ID属性。要在SAX解析器内验证,必须追踪每个之前遇过的ID和IDREF属性,检查是否有任何相符。更甚者,一个IDREF找不到对应的ID,使用者只会在整份文件都解析完后才发现,若这种连结对于建立有效输出是重要的,那用在处理整份文件的时间只是浪费。

xml在java项目中起到的作用具体是什么

设计xml的目的是用作数据交换,当然也可以用作保存数据。

xml保存数据具有平台无关,规范化。通过提供方提供的读取程序就可以读取出xml数据。

特点:

xml的特点是具有规范化(需要用到xsd),层次性,一看就懂。

缺点:

一个标签需要一个匹配的结束标签,比较冗余。

其他数据交换格式:

其他数据交换格式有:json、yaml等。

java中xml有什么作用,用在什么地方

java中xml一般是用来当做配置文件的,比方说struts的struts.xml、spring的application.xml,这里面记录的一般是配置信息,比方说servlet配置,映射注入配置等等都可以用xml来配置,当然配置也可以写入数据库,如果配置和程序的业务无关,也和系统配置无关,仅仅和系统构架有关,那就可以把配置写入xml里面来存储这些配置。

关于java解析xml什么用和java中xml有什么作用,用在什么地方的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

北京交管局 北京交管局app官网下载java开发游戏用到什么技术(从事游戏服务端开发(Java),需要具备哪些技术)