「java操作xml」java操作xml好用的api

博主:adminadmin 2022-11-23 04:37:08 37

今天给各位分享java操作xml的知识,其中也会对java操作xml好用的api进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java的xml的解析方式有什么,他们的解析流程是怎么样的,有什么区别

答:4种。(或者说是两种,因为JDOM和DOM4J是DOM的两个特殊情况)

1.SAX解析

解析方式是事件驱动机制!

SAX解析器,逐行读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时,触发事件。

可以在这些事件发生时,编写程序进行相应的处理。

优点:

分析能够立即开始,而不是等待所有的数据被处理。

逐行加载,节省内存,有助于解析大于系统内存的文档。

有时不必解析整个文档,它可以在某个条件得到满足时停止解析。

缺点:

1.单向解析,无法定位文档层次,无法同时访问同一个文档的不同部分数据(因为逐行解析,当解析第n行时,第n-1行)已经被释放了,无法再对其进行操作)。

2. 无法得知事件发生时元素的层次, 只能自己维护节点的父/子关系。

3. 只读解析方式, 无法修改XML文档的内容。

2. DOM解析

是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个 文档和内存中建立文档树模型。程序员可以通过操作文档树, 来完成数据的获取 修改 删除等。

优点:

文档在内存中加载, 允许对数据和结构做出更改。访问是双向的,可以在任何时候在树中双向解析数据。

缺点:

文档全部加载在内存中 , 消耗资源大。

3. JDOM解析

目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一 个Java特定模型,JDOM一直得到大力推广和促进。

JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题” (根据学习曲线假定为20%)

优点:

使用具体类而不是接口,简化了DOM的API。

大量使用了Java集合类,方便了Java开发人员。

缺点:

没有较好的灵活性。

性能不是那么优异。

4. DOM4J解析

它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一 个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。

目前许多开源项目中大量采用DOM4J , 例如:Hibernate。

通过java如何操作xml向其节点中添加内容比如想添加的内容

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import org.w3c.dom.*;

import org.xml.sax.SAXException;

import javax.xml.parsers.*;

import javax.xml.transform.*;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.*;

import javax.xml.xpath.*;

public class Test {

public static void main(String[] args) {

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

Element theBook=null, theElem=null, root=null;

try {

factory.setIgnoringElementContentWhitespace(true);

DocumentBuilder db=factory.newDocumentBuilder();

Document xmldoc=db.parse(new File("Test1.xml"));

root=xmldoc.getDocumentElement();

theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);

System.out.println("--- 查询找《哈里波特》 ----");

Element nameNode=(Element)theBook.getElementsByTagName("price").item(0);

String name=nameNode.getFirstChild().getNodeValue();

System.out.println(name);

output(theBook);

System.out.println("=============selectSingleNode(books/book[name='哈里波特'], root)==================");

//--- 新建一本书开始 ----

theBook=xmldoc.createElement("book");

theElem=xmldoc.createElement("name");

theElem.setTextContent("新书");

theBook.appendChild(theElem);

theElem=xmldoc.createElement("price");

theElem.setTextContent("20");

theBook.appendChild(theElem);

theElem=xmldoc.createElement("memo");

theElem.setTextContent("新书的更好看。");

theBook.appendChild(theElem);

root.appendChild(theBook);

System.out.println("--- 新建一本书开始 ----");

output(xmldoc);

System.out.println("==============================");

//--- 新建一本书完成 ----

//--- 下面对《哈里波特》做一些修改。 ----

//--- 查询找《哈里波特》----

//--- 此时修改这本书的价格 -----

theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。

System.out.println("--- 此时修改这本书的价格 ----");

output(theBook);

//--- 另外还想加一个属性id,值为B01 ----

theBook.setAttribute("id", "B01");

System.out.println("--- 另外还想加一个属性id,值为B01 ----");

output(theBook);

//--- 对《哈里波特》修改完成。 ----

//--- 要用id属性删除《三国演义》这本书 ----

theBook=(Element) selectSingleNode("/books/book[@id='B02']", root);

System.out.println("--- 要用id属性删除《三国演义》这本书 ----");

output(theBook);

theBook.getParentNode().removeChild(theBook);

System.out.println("--- 删除后的XML ----");

output(xmldoc);

//--- 再将所有价格低于10的书删除 ----

NodeList someBooks=selectNodes("/books/book[price10]", root);

System.out.println("--- 再将所有价格低于10的书删除 ---");

System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---");

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

someBooks.item(i).getParentNode().removeChild(someBooks.item(i));

}

output(xmldoc);

saveXml("Test1_Edited.xml", xmldoc);

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void output(Node node) {//将node的XML字符串输出到控制台

TransformerFactory transFactory=TransformerFactory.newInstance();

try {

Transformer transformer = transFactory.newTransformer();

transformer.setOutputProperty("encoding", "gb2312");

transformer.setOutputProperty("indent", "yes");

DOMSource source=new DOMSource();

source.setNode(node);

StreamResult result=new StreamResult();

result.setOutputStream(System.out);

transformer.transform(source, result);

} catch (TransformerConfigurationException e) {

e.printStackTrace();

} catch (TransformerException e) {

e.printStackTrace();

}

}

public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点

Node result=null;

XPathFactory xpathFactory=XPathFactory.newInstance();

XPath xpath=xpathFactory.newXPath();

try {

result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);

} catch (XPathExpressionException e) {

e.printStackTrace();

}

return result;

}

public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。

NodeList result=null;

XPathFactory xpathFactory=XPathFactory.newInstance();

XPath xpath=xpathFactory.newXPath();

try {

result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);

} catch (XPathExpressionException e) {

e.printStackTrace();

}

return result;

}

public static void saveXml(String fileName, Document doc) {//将Document输出到文件

TransformerFactory transFactory=TransformerFactory.newInstance();

try {

Transformer transformer = transFactory.newTransformer();

transformer.setOutputProperty("indent", "yes");

DOMSource source=new DOMSource();

source.setNode(doc);

StreamResult result=new StreamResult();

result.setOutputStream(new FileOutputStream(fileName));

transformer.transform(source, result);

} catch (TransformerConfigurationException e) {

e.printStackTrace();

} catch (TransformerException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

XML:

?xml version="1.0" encoding="GBK"?

books

book

name哈里波特/name

price10/price

memo这是一本很好看的书。/memo

/book

book id="B02"

name三国演义/name

price10/price

memo四大名著之一。/memo

/book

book id="B03"

name水浒/name

price6/price

memo四大名著之一。/memo

/book

book id="B04"

name红楼/name

price5/price

memo四大名著之一。/memo

/book

/books

java中如何写xml

呵呵,你这个问题,其实写XML很简单的,氛围以下几步:1.导入DOM4J包,在此我使用dom4j来做。2.创建dom4j的实例:Document document = DocumentHelper.createDocument();3.一级一级的添加节点或者属性,这个具体参照dom4j帮助:Element rootGen = document.addElement("root");4.定义以下3个对象,然后进行操作: Writer writer = null;

OutputFormat format = null;

XMLWriter xmlwriter = null; ***********************************************************************************附上代码: public void CreateXMl(StudentBean sn){

//创建document对象

Document document = DocumentHelper.createDocument();

//定义根节点Element

Element rootGen = document.addElement("root");

//定义根节点ROOT的子节点们

Element nameGen = rootGen.addElement("Name");

nameGen.addAttribute("name", "我是中文");

Element ageGen = rootGen.addElement("Age");

Element addrGen = rootGen.addElement("Address");

Writer writer = null;

OutputFormat format = null;

XMLWriter xmlwriter = null;

//将定义好的内容写入xml文件中

try {

//使用这个writer也可以,只不过遇到中文会乱码哦

// writer = new FileWriter("d:/test.xml");

//进行格式化

format = OutputFormat.createPrettyPrint();

//设定编码

format.setEncoding("UTF-8");

xmlwriter = new XMLWriter(new FileOutputStream("d:/test.xml"), format);

xmlwriter.write(document);

xmlwriter.flush();

xmlwriter.close();

System.out.println("-----------Xmlfile successfully created-------------");

} catch (Exception e) {

e.printStackTrace();

System.out.println("-----------Exception occured during of create xmlfile -------");

}

}

java读取配置文件的方法(xml)

#include XMLDoc.hpp

——相关说明

_di_IXMLDocument 为模板类

typedef System::DelphiInterface IXMLDocument _di_IXMLDocument;

_di_IXMLNode

typedef System::DelphiInterface IXMLNode _di_IXMLNode;

_di_IXMLNodeList 同

——类方法

//设置参数

void TXXX::setOptions(String name,String value){

//创建文档对象

_di_IXMLDocument XMLDoc = LoadXMLDocument(L"文件路径");

XMLDoc-Active=true;

//文档根节点

_di_IXMLNode root = XMLDoc-DocumentElement;

//想要查找节点

_di_IXMLNode tempNode;

//调用搜索方法

searchXml(name,root,tempNode);

// 处理

if(tempNode!=NULL)

tempNode-SetText(value);

XMLDoc-SaveToFile(L"文件路径");

}

//递归搜索参数节点树

void TXXX::searchXml(String name,_di_IXMLNode Parent_Node,_di_IXMLNode tempNode){

_di_IXMLNode Child_Node; //子结点

//子节点列表

_di_IXMLNodeList list = Parent_Node-ChildNodes;

for(int i=0;ilist-Count;i++)

{

Child_Node = list-Get(i);

//递归结束条件

if(Child_Node-GetNodeName()==name)

{

tempNode = Child_Node;

break;

}

else

{

//递归函数

searchXml(name,Child_Node,tempNode);

}

}

}

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

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。