以前接触过一点XML方面的知识,只能说是了解吧
最近写了一点这方面的代码,感觉这东西太灵活了,要真得运用自如还真难
生成代码
import java.io.StringWriter;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
public class XMLOutput {
private Document doc = null;
/*参数 parentElementName 类型:String ; 注释:根元素下的子元素的名字(子元素可有多个,名字都相同)。
* 参数String childElements 类型:String[]; 注释:子元素下面的所有子元素的名称(子元素下面的子元素有多个,名字不相同)。
* 参数 childValues 类型:List ,里面的元素是String[]类型; 注释:List中的一个元素对应于一个子元素下面的所有子元素的值。
*/
public String initElement(String parentElementName, String childElements[],
List childValues) {
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
doc = builder.newDocument();
//建立根元素
Element rootElement = doc.createElement("Data");
rootElement.setAttribute("xmlns",
"http://www.test.com.cn/test/service/test");
rootElement.setAttribute("xmlns:xsi",
"http://www.w3.org/2001/XMLSchema-instance");
//外层循环是根据childValues的大小来确定有多少个子元素
for (int i = 0; i < childValues.size(); i++) {
//创建子元素
Element parentElement = doc.createElement(parentElementName);
//将子元素下所有子元素的值取出
String values[] = (String[]) childValues.get(i);
//如果子元素下的子元素个数和元素值个数相等,将值赋给子元素下的所有子元素
if (childElements.length == values.length) {
for (int j = 0; j < childElements.length; j++) {
Element childElement = doc
.createElement(childElements[j]);
childElement.setTextContent(values[j]);
//将子元素下的子元素加入到子元素中
parentElement.appendChild(childElement);
}
} else {
System.out.println("在第" + (i + 1) + "个" + parentElementName
+ "中子子元素和子元素值个数不相等");
continue;
}
//将子元素加入到根元素
rootElement.appendChild(parentElement);
}
doc.appendChild(rootElement);
} catch (Exception e) {
System.out.println(e);
}
//返回生成的XML字符串
return this.getReportDoResult();
}
public String getReportDoResult() {
try {
OutputFormat format = new OutputFormat(doc);
format.setEncoding("GB2312");
StringWriter stringOut = new StringWriter();
XMLSerializer serial = new XMLSerializer(stringOut, format);
serial.asDOMSerializer();
serial.serialize(doc.getDocumentElement());
return stringOut.toString();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
return "";
}
}
生成的XML文件
<?xml version="1.0" encoding="GB2312"?>
<Data xmlns="http://www.test.com.cn/test/service/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item>
<SFLSH>1</SFLSH><SQH>2</SQH><HH>3</HH><HM>4</HM><SFXM>5</SFXM><SFJE>6</SFJE>
</Item>
<Item><SFLSH>7</SFLSH><SQH>8</SQH><HH>9</HH><HM>10</HM><SFXM>11</SFXM><SFJE>12</SFJE>
</Item>
</Data>
解析代码
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class XMLParse {
/*
* 参数 filePath 类型 String ; 注释:XML文件绝对路径名。
* 参数 parentElementName 类型 String ; 注释:根元素下的子元素的名字(子元素有多个,名字都相同)。
* 参数 childElements 类型 List ; 注释:子元素下的所有子元素的名字(子元素下的所有子元素的名字不行同)。
*/
public void parse(String filePath,String parentElementName,List childElements){
DocumentBuilderFactory factory = null;
factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
Document doc = null;
try {
builder = factory.newDocumentBuilder();
doc = builder.parse(filePath);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
NodeList nl = null;
//读取根元素里面的子元素,子元素可能有多个
nl = doc.getElementsByTagName(parentElementName);
//循环输出每个子元素下的子元素的名字和值
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
//得到子元素下的子元素的值
for(int j=0;j<childElements.size();j++){
System.out.println(childElements.get(j)+":"
+ e.getElementsByTagName(childElements.get(j)+"").item(0).getTextContent());
}
System.out.println("--------------");
}
}
}
还有XML的专业工具XMLSpy ,建议使用中文版的,那些专业的词汇真的有点看不明白。
目前能做的也只能是生成解析这一种格式的,还差得太远了。
路漫漫长,上下而求索吧。
分享到:
相关推荐
本文将深入探讨XML解析和生成工具的相关知识,以及如何利用提供的`Markup.cpp`和`Markup.h`文件进行操作。 XML的结构: XML文档由一系列元素构成,每个元素都有一个开始标签和结束标签,如 `<tag>` 和 `</tag>`。...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
在实际应用中,根据需求选择适合的XML生成和解析方法至关重要。StringBuilder适用于简单快速的XML构造,XmlSerializer更适合需要精确控制XML结构的情况,而XmlPullParser则适用于高效地解析大文件或流式数据。理解...
XML 文件通常包含结构化的数据,并且可以被多种编程语言解析和生成。本篇将详细介绍如何处理 XML 文件的生成与解析,以及解决可能遇到的乱码问题。 首先,我们来看解析 XML 的部分。在 Java 中,`dom4j` 库是一个...
### Java中XML生成与解析的四种方法 #### 一、概述 XML(可扩展标记语言)作为一种跨平台、跨语言的数据交换格式,在数据集成与交互领域具有重要作用。它以其平台无关性、语言无关性和系统无关性的特点,在软件开发...
一个方便的XML生成及解析工具类,里面有测试main方法详细的介绍如何使用,可以无需配置直接编译使用。
2. **XML生成**:除了解析,Libxml2还提供了生成XML文档的功能,允许开发者创建新的XML文档或者修改已有的XML文档。 3. **XPath支持**:XPath是XML路径语言,用于在XML文档中查找信息。Libxml2实现了XPath 1.0规范...
5. **自动生成代码**:最后,这个自动化工具可能还会包含一个功能,用于自动生成上述过程中的Qt类和绑定代码,这样开发者只需要专注于XML结构,无需关心底层的解析逻辑。 通过这种方式,开发者可以更专注于业务逻辑...
SAX解析器如`SaxXml`实例,展示了如何通过事件驱动的方式高效地处理XML文档,而DOM和SAX在生成XML时提供了不同的策略,适用于不同场景的需求。熟悉这些技术,可以极大地提升你在IT行业的专业能力。
本篇文章将深入探讨Android中的XML生成与解析,帮助开发者更好地理解和运用这一技术。 一、XML简介 XML是一种标记语言,它的设计目标是传输和存储数据,而不是显示数据。XML文档结构清晰,易于机器和人类阅读,支持...
以下是一个基本的步骤,展示如何使用Java和Apache POI通过XML解析生成Word文档: 1. 引入Apache POI库:在项目中添加Apache POI依赖,通常是通过Maven或Gradle的配置完成。 2. 创建Word文档对象:使用`...
"Dom4j 生成 XML 和解析 XML" Dom4j 是一个 Java 库,用于处理 XML 文档。它提供了生成和解析 XML 文档的功能。在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j ...
使用TinyXML生成XML文档,首先需要创建一个`TiXmlDocument`实例,然后添加元素和属性。例如,创建一个`<book>`元素,可以使用`TiXmlElement`的构造函数,并通过`SetAttribute()`设置属性。元素可以嵌套,通过`...
以上就是Java中处理XML的一些基本操作,包括生成、解析、修改和删除元素。在实际项目中,你可能还会遇到更复杂的需求,比如验证XML是否符合特定的Schema,或者使用XPath和XSLT进行查询和转换。Java提供了丰富的库,...
5. **生成器实现**:XML生成器则将内存中的数据结构转化为XML文档。它需要能够准确地生成正确的XML语法,包括正确的嵌套、结束标签、属性等。 6. **XPath支持**:虽然未明确提及,但高级的XML库可能会支持XPath,这...
总结,XML文件的生成和解析是IT开发中的常见任务。通过SAX解析技术,我们能高效地处理大型XML文档,而无需一次性加载全部内容到内存。理解并熟练运用这些知识,将有助于提升XML相关的项目开发效率和性能。
Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法。 XML 解析 XML 解析是指...
在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。
总的来说,使用Pull解析器读取和生成XML文件是一种高效且灵活的方法,尤其适合处理大型XML文档。通过掌握这一技术,开发者可以更好地处理XML数据,提高程序的性能和稳定性。在进行XML操作时,还需注意数据的正确性和...