`

XML生成和解析

    博客分类:
  • XML
阅读更多

以前接触过一点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解析和生成工具

    本文将深入探讨XML解析和生成工具的相关知识,以及如何利用提供的`Markup.cpp`和`Markup.h`文件进行操作。 XML的结构: XML文档由一系列元素构成,每个元素都有一个开始标签和结束标签,如 `&lt;tag&gt;` 和 `&lt;/tag&gt;`。...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    xml文件生成与解析

    在实际应用中,根据需求选择适合的XML生成和解析方法至关重要。StringBuilder适用于简单快速的XML构造,XmlSerializer更适合需要精确控制XML结构的情况,而XmlPullParser则适用于高效地解析大文件或流式数据。理解...

    xml生成解析

    XML 文件通常包含结构化的数据,并且可以被多种编程语言解析和生成。本篇将详细介绍如何处理 XML 文件的生成与解析,以及解决可能遇到的乱码问题。 首先,我们来看解析 XML 的部分。在 Java 中,`dom4j` 库是一个...

    Java_XML生成与解析的四种方法

    ### Java中XML生成与解析的四种方法 #### 一、概述 XML(可扩展标记语言)作为一种跨平台、跨语言的数据交换格式,在数据集成与交互领域具有重要作用。它以其平台无关性、语言无关性和系统无关性的特点,在软件开发...

    XML生成及解析工具

    一个方便的XML生成及解析工具类,里面有测试main方法详细的介绍如何使用,可以无需配置直接编译使用。

    xml生成,解析开源库

    2. **XML生成**:除了解析,Libxml2还提供了生成XML文档的功能,允许开发者创建新的XML文档或者修改已有的XML文档。 3. **XPath支持**:XPath是XML路径语言,用于在XML文档中查找信息。Libxml2实现了XPath 1.0规范...

    基于Python实现的自动化生成XML解析类

    5. **自动生成代码**:最后,这个自动化工具可能还会包含一个功能,用于自动生成上述过程中的Qt类和绑定代码,这样开发者只需要专注于XML结构,无需关心底层的解析逻辑。 通过这种方式,开发者可以更专注于业务逻辑...

    XML解析与生成

    SAX解析器如`SaxXml`实例,展示了如何通过事件驱动的方式高效地处理XML文档,而DOM和SAX在生成XML时提供了不同的策略,适用于不同场景的需求。熟悉这些技术,可以极大地提升你在IT行业的专业能力。

    Android xml生成与解析

    本篇文章将深入探讨Android中的XML生成与解析,帮助开发者更好地理解和运用这一技术。 一、XML简介 XML是一种标记语言,它的设计目标是传输和存储数据,而不是显示数据。XML文档结构清晰,易于机器和人类阅读,支持...

    java XML解析方式实现自动生成word文档

    以下是一个基本的步骤,展示如何使用Java和Apache POI通过XML解析生成Word文档: 1. 引入Apache POI库:在项目中添加Apache POI依赖,通常是通过Maven或Gradle的配置完成。 2. 创建Word文档对象:使用`...

    利用Dom4j生成XML和解析XML

    "Dom4j 生成 XML 和解析 XML" Dom4j 是一个 Java 库,用于处理 XML 文档。它提供了生成和解析 XML 文档的功能。在本文中,我们将学习如何使用 Dom4j 生成 XML 文档和解析 XML 文档。 生成 XML 文档 使用 Dom4j ...

    xml生成与解析

    使用TinyXML生成XML文档,首先需要创建一个`TiXmlDocument`实例,然后添加元素和属性。例如,创建一个`&lt;book&gt;`元素,可以使用`TiXmlElement`的构造函数,并通过`SetAttribute()`设置属性。元素可以嵌套,通过`...

    java实现xml的生成、解析等各种操作

    以上就是Java中处理XML的一些基本操作,包括生成、解析、修改和删除元素。在实际项目中,你可能还会遇到更复杂的需求,比如验证XML是否符合特定的Schema,或者使用XPath和XSLT进行查询和转换。Java提供了丰富的库,...

    C语言编写的XML库源文件(支持XML生成与解析)

    5. **生成器实现**:XML生成器则将内存中的数据结构转化为XML文档。它需要能够准确地生成正确的XML语法,包括正确的嵌套、结束标签、属性等。 6. **XPath支持**:虽然未明确提及,但高级的XML库可能会支持XPath,这...

    xml文件生成和解析

    总结,XML文件的生成和解析是IT开发中的常见任务。通过SAX解析技术,我们能高效地处理大型XML文档,而无需一次性加载全部内容到内存。理解并熟练运用这些知识,将有助于提升XML相关的项目开发效率和性能。

    android xml多种解析生成

    Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法。 XML 解析 XML 解析是指...

    java解析xml生成json对象

    在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。

    使用Pull解析器读取XML文件和生成XML文件

    总的来说,使用Pull解析器读取和生成XML文件是一种高效且灵活的方法,尤其适合处理大型XML文档。通过掌握这一技术,开发者可以更好地处理XML数据,提高程序的性能和稳定性。在进行XML操作时,还需注意数据的正确性和...

Global site tag (gtag.js) - Google Analytics