DOM4J
/**
* doc2XmlFile 将Document对象保存为一个xml文件到本地
*
* @return true:保存成功 flase:失败
* @param filename
* 保存的文件名
* @param document
* 需要保存的document对象
*/
public static boolean doc2XmlFile(Document document, String filename) {
boolean flag = true;
try {
/* 将document中的内容写入文件中 */
// 默认为UTF-8格式,指定为"GB2312"
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
XMLWriter writer = new XMLWriter(
new FileWriter(new File(filename)), format);
writer.write(document);
writer.close();
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
return flag;
}
/**
* string2XmlFile 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败
*
* @return true:保存成功 flase:失败
* @param filename
* 保存的文件名
* @param str
* 需要保存的字符串
*/
public static boolean string2XmlFile(String str, String filename) {
boolean flag = true;
try {
Document doc = DocumentHelper.parseText(str);
flag = doc2XmlFile(doc, filename);
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
return flag;
}
/**
* load 载入一个xml文档
*
* @return 成功返回Document对象,失败返回null
* @param uri
* 文件路径
*/
public static Document load(String filename) {
Document document = null;
try {
SAXReader saxReader = new SAXReader();
document = saxReader.read(new File(filename));
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
/**
* xmlWriteDemoByString 演示String保存为xml文件
*/
public void xmlWriteDemoByString() {
String s = "";
/** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写 */
s = "<config>\r\n" + " <ftp name='DongDian'>\r\n"
+ " <ftp-host>127.0.0.1</ftp-host>\r\n"
+ " <ftp-port>21</ftp-port>\r\n"
+ " <ftp-user>cxl</ftp-user>\r\n"
+ " <ftp-pwd>longshine</ftp-pwd>\r\n"
+ " <!-- ftp最多尝试连接次数 -->\r\n"
+ " <ftp-try>50</ftp-try>\r\n"
+ " <!-- ftp尝试连接延迟时间 -->\r\n"
+ " <ftp-delay>10</ftp-delay>\r\n" + " </ftp>\r\n"
+ "</config>\r\n";
// 将文件生成到classes文件夹所在的目录里
string2XmlFile(s, "d://xmlWriteDemoByString.xml");
// 将文件生成到classes文件夹里
// string2XmlFile(s, "classes/xmlWriteDemoByString.xml");
}
/**
* 演示手动创建一个Document,并保存为XML文件
*/
public void xmlWriteDemoByDocument() {
/** 建立document对象 */
Document document = DocumentHelper.createDocument();
/** 建立config根节点 */
Element configElement = document.addElement("config");
/** 建立ftp节点 */
configElement.addComment("东电ftp配置");
Element ftpElement = configElement.addElement("ftp");
ftpElement.addAttribute("name", "DongDian");
/** ftp 属性配置 */
Element hostElement = ftpElement.addElement("ftp-host");
hostElement.setText("127.0.0.1");
(ftpElement.addElement("ftp-port")).setText("21");
(ftpElement.addElement("ftp-user")).setText("cxl");
(ftpElement.addElement("ftp-pwd")).setText("longshine");
ftpElement.addComment("ftp最多尝试连接次数");
(ftpElement.addElement("ftp-try")).setText("50");
ftpElement.addComment("ftp尝试连接延迟时间");
(ftpElement.addElement("ftp-delay")).setText("10");
/** 保存Document */
doc2XmlFile(document, "d://xmlWriteDemoByDocument.xml");
}
/**
* 演示读取文件的具体某个节点的值
*/
public static void xmlReadDemo() {
Document doc = load("d://xmlWriteDemoByDocument.xml");
// Element root = doc.getRootElement();
/** 先用xpath查找所有ftp节点 并输出它的name属性值 */
List list = doc.selectNodes("/config/ftp");
Iterator it = list.iterator();
while (it.hasNext()) {
Element ftpElement = (Element) it.next();
System.out.println("ftp_name="
+ ftpElement.attribute("name").getValue());
}
/** 直接用属性path取得name值 */
list = doc.selectNodes("/config/ftp/@name");
it = list.iterator();
while (it.hasNext()) {
Attribute attribute = (Attribute) it.next();
System.out.println("@name=" + attribute.getValue());
}
/** 直接取得DongDian ftp的 ftp-host 的值 */
list = doc.selectNodes("/config/ftp/ftp-host");
it = list.iterator();
Element hostElement = (Element) it.next();
System.out.println("DongDian's ftp_host=" + hostElement.getText());
}
/**
* doc2String 将xml文档内容转为String
*
* @return 字符串
* @param document
*/
public static String doc2String(Document document) {
String s = "";
try {
// 使用输出流来进行转化
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 使用GB2312编码
OutputFormat format = new OutputFormat(" ", true, "UTF-8");
XMLWriter writer = new XMLWriter(out, format);
writer.write(document);
s = out.toString("UTF-8");
} catch (Exception ex) {
ex.printStackTrace();
}
return s;
}
实例一:(读取硬盘存在的xml文件)
SAXReader read=new SAXReader();
Document doc=null;
try {
doc=read.read(new File("d://student.xml"));
List classes=doc.selectNodes("//class");
System.out.println("某学校共有"+classes.size()+"个班级");
for(Iterator it=classes.iterator();it.hasNext();){
Element eleClass=(Element)it.next();
String id=eleClass.attributeValue("name");
System.out.println("班级 "+id);
System.out.println("***********************");
Iterator it1=eleClass.elementIterator();
while(it1.hasNext()){
Element eleStu=(Element)it1.next();
String name=eleStu.elementText("name");
String age=eleStu.element("age").getTextTrim();
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
实例二:(读取xml字符串)
StringBuffer sb=new StringBuffer("<?xml version=\"1.0\" encoding=\"gb2312\"?>");
sb.append("<result>");
sb.append("<class name=\"1\">");
sb.append("<student id=\"1\">");
sb.append("<name>龙准</name>");
sb.append("<age>25</age>");
sb.append("</student>");
sb.append("<student id=\"2\">");
sb.append("<name>龙准2</name>");
sb.append("<age>23</age>");
sb.append("</student>");
sb.append("</class>");
sb.append("</result>");
try {
//第一种读取xml字符串的写法
Document doc=DocumentHelper.parseText(sb.toString());
//第二种读取xml字符串的写法
// SAXReader read=new SAXReader();
// Document doc=read.read(new StringReader(sb.toString()));
//第三种读取xml字符串的写法
// SAXReader read=new SAXReader();
// Document doc=read.read(new ByteArrayInputStream(sb.toString().getBytes()));
List list=doc.selectNodes("//class");
System.out.println("某学校共有"+list.size()+"个班级");
for(Iterator it=list.iterator();it.hasNext();){
Element eleClass=(Element)it.next();
String id=eleClass.attributeValue("name");
System.out.println("班级 "+id);
System.out.println("***********************");
for(Iterator it1=eleClass.elementIterator();it1.hasNext();){
Element eleStu=(Element)it1.next();
String name=eleStu.element("name").getText();
String age=eleStu.elementText("age");
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
实例三:(手动创建document并读取)
Document doc=DocumentHelper.createDocument();
Element eleResult=doc.addElement("result");
Element eleClas=eleResult.addElement("class");
eleClas.addAttribute("name", "1");
Element elestu=eleClas.addElement("student");
elestu.addAttribute("id", "1");
Element eleName=elestu.addElement("name");
eleName.addText("龙准");
Element eleAge=elestu.addElement("age");
eleAge.addText("25");
Element elestu2=eleClas.addElement("student").addAttribute("id", "2");
elestu2.addElement("name").setText("龙准");
elestu2.addElement("age").setText("23");
List list=doc.selectNodes("//class");
System.out.println("某学校共有"+list.size()+"个班级");
for(Iterator it=list.iterator();it.hasNext();){
Element eleClass=(Element)it.next();
String id=eleClass.attributeValue("name");
System.out.println("班级 "+id);
System.out.println("***********************");
for(Iterator it1=eleClass.elementIterator();it1.hasNext();){
Element eleStu=(Element)it1.next();
String name=eleStu.element("name").getText();
String age=eleStu.elementText("age");
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
分享到:
相关推荐
XML(eXtensible Markup Language)是一种用于标记数据的语言,它是HTML(超文本标记语言)的一个扩展,旨在传输和存储数据。本教程将深入探讨XML的基本概念、语法、解析方式以及在实际应用中的作用。 XML的设计...
4. XML解析: - DOM(Document Object Model):将整个XML文档加载到内存中,形成一棵节点树,便于遍历和操作。 - SAX(Simple API for XML):事件驱动的解析方式,逐行读取XML,只在需要时处理特定事件,适用于...
Java中的XML解析技术是开发过程中不可或缺的一部分,尤其是在处理结构化数据时。XML(eXtensible Markup Language)因其可扩展性和灵活性,常被用于存储和交换数据。在Java中,有四种主要的XML解析技术,它们分别是...
在提供的"范春梅-XML基础教程源码-code"中,你可以找到关于XML处理的实例代码,可能包括创建、解析、修改XML文档等操作。通过这些源码,你可以更好地理解XML在实际开发中的应用。 总之,XML作为一种数据交换和存储...
1. **解析器**:XML解析器读取XML文档并将其转化为内存中的对象模型,如DOM(文档对象模型)或SAX(简单API for XML)。 2. **DOM**:将整个XML文档加载到内存,形成一个树形结构,方便遍历和操作。 3. **SAX**:...
oracle过程解析XML,支持超4000,并很方便的 . 出结果 oracle过程解析XML,支持超4000 oracle过程解析XML,支持超4000
本资源"iPhone iOS XML解析源代码"提供了一个深入学习和比较XML解析技术的实例,包含两种不同的解析方法,旨在帮助开发者了解它们的性能差异。 首先,我们来探讨第一种解析方式:NSXMLParser。这是Apple提供的内置...
HTTP XML文件解析是网络通信中常见的一种技术,它结合了HTTP协议和XML(可扩展标记语言)的数据格式,广泛应用于Web服务、API交互以及数据交换等领域。本文将深入探讨在线解析HTTP XML文件的相关知识点,包括HTTP...
在实际应用中,根据需求和性能考虑,可以选择合适的XML解析库和方法。例如,如果需要频繁修改XML文档,DOM可能更适合;如果处理大型XML文件,SAX或StAX会是更好的选择。结合这些库,可以高效地进行XML的读写、查询和...
在IT行业中,网络通信是至关重要的部分,而HTTP...理解HTTP协议的工作原理,掌握WinInet的API用法,以及熟悉XML解析库的使用,对于开发涉及网络通信的C++应用程序至关重要。通过实践,你可以更好地理解和掌握这些技能。
pugixml, 带有XPath支持的C++的轻量级简单和快速XML解析器 pugixml pugixml是一个 C++ XML处理库,由具有丰富遍历/修改功能的DOM和基于XML的超快速XML解析器组成,用于构造XML树和复杂的数据驱动树查询的XPath 1.0...
XML 解析器原理及性能比较 XML 解析器是指将 XML 文档转换为计算机可以理解的格式的软件组件。常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和...
2. **数据解析**:HTML5页面通过JavaScript来解析XML文件,将数据加载到内存中,并显示在界面上。DOM(Document Object Model)API是用于处理XML和HTML文档的标准接口,可用于遍历和操作XML节点。 3. **用户界面**...
2. **解析XML**:获取到XML响应后,我们可以使用DOM方法如getElementsByTagName、getElementById、getAttribute等来查找和提取XML节点信息。例如,获取所有`<effect>`标签: ```javascript var effects = xmlDoc....
可以使用XML解析库,如Python的`xml.etree.ElementTree`,Java的`javax.xml.parsers.DocumentBuilderFactory`,或者JavaScript的`DOMParser`。这些库提供了解析XML文档,查找特定元素,以及提取和修改数据的功能。 ...
- XML解析器负责解析XML文档,确保其符合XML标准。 - **1.3.3 浏览器和其他工具** - 大多数现代浏览器支持XML,并能直接显示或通过样式表呈现XML文档。 - **1.3.4 处理过程总结** - XML文档的处理通常涉及创建、...
这篇文档将围绕着标题中提到的六个关键技术领域——CSS(层叠样式表)、DHTML(动态超文本标记语言)、XMLDOM(XML文档对象模型)、T-SQL(Transact-SQL)、XPath(XML路径语言)以及正则表达式,展开详细的阐述。...
7. **解析与验证**:XML文档可以被解析器读取,解析器可以是DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)。验证器则检查文档是否符合其DTD或Schema。 8. **XPath与XSLT**:XPath是查询...
- **解析准备**: 在C++中,可以使用第三方库如TinyXML、pugixml或Xerces-C++进行XML解析。这里假设我们使用TinyXML,首先需要包含库文件并创建一个`TiXmlDocument`对象。 - **加载XML数据**: 使用`...