为了简化编写处理 XML 的 Java 程序,已经建立了多种编程接口。这些接口或者由公司定义,或者由标准体或用户组定义,以满足 XML 程序员的需要。本教程将讨论以下接口:
Document Object Model (DOM,文档对象模型),Level 2
Simple API for XML (SAX), Version 2.0
JDOM, Jason Hunter 和 Brett McLaughlin 创立的一种简单 Java API
Java API for XML Processing (JAXP)
这四种接口中前三个(DOM、SAX
和 JDOM)定义了如何访问与表示 XML 文档的内容。JAXP 包含创建解析器对象的类。要创建 DOM 或 SAX 解析器,您需要使用
JAXP。如果使用 JDOM,JDOM 库将在幕后使用 JAXP 为您创建一个解析器。总之:
使用 DOM、SAX 或 JDOM 处理 XML 文档的内容。
如果使用 DOM 或 SAX,则使用 JAXP 创建解析器。
如果使用 JDOM,则 JDOM 库为您创建解析器。
我将考察上述每种 API 的设计目标、长处和缺点,同时还涉及到一点它们的历史以及创建这些 API 的标准体。
关于例子
本教程中包含多个使用 DOM、SAX 和 JDOM API 的示例程序。所有这些程序都使用 XML 标记的莎士比亚十四行诗。十四行诗的结构如下:
<sonnet>
<author>
<lastName>
<firstName>
<nationality>
<yearOfBirth>
<yearOfDeath>
</author>
<lines>
[14 <line> elements]
</lines>
</sonnet>
设置机器
在运行这些例子之前,需要对您的机器作一些设置。
(假设您知道如何编译和运行 Java 程序,并了解如何设置 CLASSPATH变量。)
首先请访问 Apache XML Project (http://xml.apache.org/xerces2-j/) 上的 Xerces XML 解析器主页。
您也可以直接去 下载页面 (http://xml.apache.org/xerces2-j/download.cgi)。
解压从 Apache 下载的文件。根据解析器版本的不同,这样将会创建名为 xerces-2_5_0或者类似名称的目录。
所需要的 JAR 文件(xercesImpl.jar和xml-apis.jar)应该出现在 Xerces 根目录下。
访问 JDOM 项目站点 并下载最新版本的 JDOM (http://jdom.org/)。
解压从 JDOM 下载的文件,这样将建立名为 jdom-b9或者旅毁类似名称的目录。
所需要的 JAR 文件(jdom.jar)应该在build目录中。
最后请下载本教程的示例压缩文件 ,并解压该文件。
把当前目录 (.)、xercesImpl.jar、xml-apis.jar和jdom.jar添加到CLASSPATH变量中。
基础
XML 解析器是读取 XML 文档并分析其结构的一段代码。这一部分将介绍 XML 解析器是如何工作的。
我将讨论不同类型的 XML 解析器以及何时使用它们。
本教程后面的章节将讨论如何创建解析羡和器以及如何处理解析器给出的结果。
如何使用解析器
我将在后面的章节对此详细讨论,一般而言使用解析器需要以下步骤:
创建一个解析器对象
使解析器指向您的 XML 文档
处理结果
显然第三步最为复杂。一旦知道了 XML 文档的内容,比方说,您可能希望生成一个 Web 页面、创建一个订单或者做一个饼图。
考虑到 XML 文档所含数据的兄镇盯多样性,编写一个应用程序处理所有可能的输入是一项艰巨的任务。
所幸的是,这里讨论的常见 XML 解析工具使这项工作大大简化了。
‘贰’ java读取配置文件的方法(xml)
用的是jdom包
URL url = RederXml.class.getClassLoader().getResource("");
String path = url.toString() + "/config.xml";\\工程种xml的路径
HashMap<String, String> map = new HashMap<String, String>();
SAXBuilder sax = new SAXBuilder();
Document doc = null;
try {
doc = sax.build(path);
} catch (JDOMException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Element root = doc.getRootElement();
‘叁’ 如何用java生成一个xml文件
在Java编程中,生成XML文件可以通过多种方式实现,这里我们采用DOM4J库来创建一个简单的XML文档。首先,你需要从官方网站或第三方库下载并添加dom4j.jar包到你的项目中。接着,我们来看一段具体的代码示例:
java
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.swing.JOptionPane;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* @author wsj
*/
public class Test1 {
public static void main(String[] args) throws Exception {
Document dom = DocumentHelper.createDocument();
Element root = dom.addElement("XVal");
root.addAttribute("X", "X字符串的值");
root.setText("Xval标签中间的值");
String xml = dom.asXML();
System.out.println(xml);
File f = new File("d:/xml.xml");
PrintWriter pw = new PrintWriter(f);
pw.write(xml);
pw.close();
JOptionPane.showMessageDialog(null, "已生成xml文件,路径为为d:/xml.xml");
}
}
在这段代码中,我们首先创建了一个名为dom的Document对象,然后添加了一个根元素XVal。接着,我们给这个根元素添加了一个属性X,并设置了其值为"X字符串的值"。然后,我们设置了一个文本内容为"Xval标签中间的值"。通过调用dom对象的asXML()方法,我们可以将这个Document对象转换为一个XML字符串。最后,我们使用PrintWriter将这个XML字符串写入到文件d:/xml.xml中。
通过这段代码,你可以生成一个简单的XML文件。这种技术在数据交换、配置文件管理等领域有着广泛的应用。在实际开发中,你可能需要根据具体需求对这个基础框架进行扩展,例如添加更多的元素、属性,或者处理更复杂的XML结构。
注意,这个例子中的路径"d:/xml.xml"是固定的,你可能需要根据实际情况进行调整。另外,这个例子使用了JOptionPane来显示信息,如果你的应用程序不需要这种用户交互,你可以选择不使用它,或者替换为你自己的输出方式。
以上就是使用Java生成XML文件的基本流程,希望对你有所帮助。
‘肆’ java项目中一般需要用到xml技术的哪些方面
XML的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理,XML曾经是异构系统间交换数据的事实标准,但此项功能几乎已经被JSON(JavaScript Object Notation)取而代之。当然,目前很多软件仍然使用XML来存储配置信息,我们在很多项目中通常也会将作为配置信息的硬代码写在XML文件中,Java的很多框架也是这么做的,而且这些框架都选择了dom4j作为处理XML的工具,因为Sun公司的官方API实在不怎么好用。
补充:现在有很多时髦的软件(如Sublime)已经开始将配置文件书写成JSON格式,我们已经强烈的感受到XML的另一项功能也将逐渐被业界抛弃。
‘伍’ 如何用java语言生成xml文件,并将它返回
实例:
holen.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<!--This is a test for dom4j, holen, 2004.9.11-->
<book show="yes">
<title>Dom4j Tutorials</title>
</book>
<book show="yes">
<title>Lucene Studing</title>
</book>
<book show="no">
<title>Lucene in Action</title>
</book>
<owner>O'Reilly</owner>
</books>
建立一个XML文档:
/**
* 建立一个XML文档,文档名由输入属性决定
* @param filename 需建立的文件名
* @return 返回操作结果, 0表失败, 1表成功
*/
public int createXMLFile(String filename){
/** 返回操作结果, 0表失败, 1表成功 */
int returnValue = 0;
/** 建立document对象 */
Document document = DocumentHelper.createDocument();
/** 建立XML文档的根books */
Element booksElement = document.addElement("books");
/** 加入一行注释 */
booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
/** 加入第一个book节点 */
Element bookElement = booksElement.addElement("book");
/** 加入show属性内容 */
bookElement.addAttribute("show","yes");
/** 加入title节点 */
Element titleElement = bookElement.addElement("title");
/** 为title设置内容 */
titleElement.setText("Dom4j Tutorials");
/** 类似的完成后两个book */
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show","yes");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene Studing");
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show","no");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene in Action");
/** 加入owner节点 */
Element ownerElement = booksElement.addElement("owner");
ownerElement.setText("O'Reilly");
try{
/** 将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
writer.write(document);
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
}catch(Exception ex){
ex.printStackTrace();
}
return returnValue;
}
说明:
Document document = DocumentHelper.createDocument();
通过这句定义一个XML文档对象。
Element booksElement = document.addElement("books");
通过这句定义一个XML元素,这里添加的是根节点。
Element有几个重要的方法:
l addComment:添加注释
l addAttribute:添加属性
l addElement:添加子元素
‘陆’ 如何用java封装解析一个多层次的XML文件,急求大神帮助
下面提供了XML解析成实体类,以及实体类转换成xml的方法。
public class SwitchXML {
private XStream xStream = new XStream();
private String xmlPath = "D:/data.xml";
// 1. obj -> xml(object类型转换为xml类型)
public String printXML(User user) {
System.out.println("obj -> xml");
String xml = xStream.toXML(user);
System.out.println(xml);
return xml;
}
// 2. xml->obj(xml类型转换为object类型,并打印)
public void printObj(String xml) {
System.out.println("xml -> obj");
User u = (User) xStream.fromXML(xml);
System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime());
}
// 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)
public void writerXML(User user) {
try {
FileOutputStream fs = new FileOutputStream(xmlPath);
xStream.toXML(user, fs);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
// 4. 读取XML文件,加载进相应Object类型
public void readerXML() {
User user = new User();
FileInputStream fis = null;
try {
fis = new FileInputStream(xmlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xStream.fromXML(fis, user);
// 打印对象信息
System.out.println(user.toString());
// 打印对象的属性值
System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"
+ user.getRegisteredTime());
}
public static void main(String[] args) {
// 用户名
String username = "admin";
// 密码
String password = "admin";
// 注册时间
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String registeredtime = format.format(now);
User user = new User(username, password, registeredtime);
SwitchXML switchXML = new SwitchXML();
// 1. object类型转换为xml类型,在控制台打印
String xml = switchXML.printXML(user);
System.out.println("---------------------");
// 2. xml类型转换为object类型,在控制台打印
switchXML.printObj(xml);
System.out.println("---------------------");
// 3. 将object类型转换为xml类型,并写入XML文件
switchXML.writerXML(user);
System.out.println("---------------------");
// 4. 读取XML文件,加载进相应Object类型
switchXML.readerXML();
}
‘柒’ java中频繁xml格式化报文组装不全
您要问的是java中频繁xml格式化报文组装不全是为什么?解析错误。将Java对象转换为XML格式时,需要使用XML解析器和格式化器,如XML解析器无法正确解析格式化的XML文件,或格式化器在处理XML文件时出现错误,就会导致报文组装不全的问题。