`
lylegend13
  • 浏览: 82777 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java读写xml(对复杂数据,使用中间模型)

 
阅读更多

1、创建.xml,设计.xml结构。

 

<?xml version="1.0"?>
<Xmodel>
	<Xnodes>
		<Xnode id="n1" type="node2"></Xnode>
		<Xnode id="n2" type="node3"></Xnode>
		<Xnode id="n3" type="node4"></Xnode>
	</Xnodes>
	<Xbizs>
		<Xbiz id="b1" snode="n1" tnode="n2"></Xbiz>
		<Xbiz id="b2" snode="n3" tnode="n1"></Xbiz>
	</Xbizs>
</Xmodel>

 

 2、创建.xsd,可以借助XMLSpy软件,有从.xml生成.xsd功能。

      注意:maxOccurs="unbounded"这句,能表示出Xbizs里可以有很多Xbiz

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:element name="Xmodel">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Xnodes" type="Xnodes"/>
				<xs:element name="Xbizs" type="Xbizs"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="Xnodes">
		<xs:sequence>
			<xs:element name="Xnode" type="Xnode" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Xbizs">
		<xs:sequence>
			<xs:element name="Xbiz" type="Xbiz" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="Xnode">
		<xs:attribute name="id" type="xs:string" use="required"/>
		<xs:attribute name="type" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="Xbiz">
		<xs:attribute name="id" type="xs:string" use="required"/>
		<xs:attribute name="snode" type="xs:string" use="required"/>
		<xs:attribute name="tnode" type="xs:string" use="required"/>
	</xs:complexType>
</xs:schema>

3、生成中间模型,可以使用xjc命令,也可以借助专门编写的"ant打jar包"的.xml。这里我采用后者生成了.jar,结构如下:

 

-test.jaxb.jar
   -test.jaxb
      -ObjectFactory.class
      -Xbiz.class
      -Xbizs.class
      -Xmodel.class
      -Xnode.class
      -Xnodes.class
  

     Xmodel.java内容如下:

 

package test.jaxb;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "xnodes", "xbizs" })
@XmlRootElement(name = "Xmodel")
public class Xmodel {

	@XmlElement(name = "Xnodes", required = true)
	protected Xnodes xnodes;
	@XmlElement(name = "Xbizs", required = true)
	protected Xbizs xbizs;

	public Xnodes getXnodes() {
		return xnodes;
	}

	public void setXnodes(Xnodes value) {
		this.xnodes = value;
	}

	public Xbizs getXbizs() {
		return xbizs;
	}

	public void setXbizs(Xbizs value) {
		this.xbizs = value;
	}
}

 

Xnodes.java内容如下:

 

package test.jaxb;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Xnodes", propOrder = { "xnode" })
public class Xnodes {

	@XmlElement(name = "Xnode", required = true)
	protected List<Xnode> xnode;

	public List<Xnode> getXnode() {
		if (xnode == null) {
			xnode = new ArrayList<Xnode>();
		}
		return this.xnode;
	}
}
 

4、编写本地的对象模型,我这里的对象模型类结构如下:

 

-src
   -object
      -Biz.java
      -Model.java
      -Node.java

 

     Model.java内容如下:

 

package object;

import java.util.ArrayList;
import java.util.List;

public class Model {
	public List<Node> nodeList=new ArrayList<Node>();
	
	public List<Biz> bizList=new ArrayList<Biz>();
}
  

5、读取.xml后,写到另一个.xml。

 

package object;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import test.jaxb.ObjectFactory;
import test.jaxb.Xbiz;
import test.jaxb.Xmodel;
import test.jaxb.Xnode;

public class test {

	public static void main(String[] args) {
		Model model = read();
		if (null != model) {
			write(model);
		}
	}

	public static Model read() {
		try {
			JAXBContext jc = JAXBContext.newInstance("test.jaxb");
			Unmarshaller u = jc.createUnmarshaller();

			Xmodel Xmodel = (Xmodel) u.unmarshal(new File(
					"C:\\read.xml"));

			Model model = new Model();

			Map<String, Node> nodeSet = new HashMap<String, Node>();
			for (Xnode Xnode : Xmodel.getXnodes().getXnode()) {
				Node node = new Node();
				node.id = Xnode.getId();
				node.type = Xnode.getType();

				nodeSet.put(node.id, node);
				model.nodeList.add(node);
			}

			for (Xbiz bizType : Xmodel.getXbizs().getXbiz()) {
				Biz biz = new Biz();
				biz.id = bizType.getId();
				biz.snode = nodeSet.get(bizType.getSnode());
				biz.tnode = nodeSet.get(bizType.getTnode());

				model.bizList.add(biz);
			}

			System.out.println(model.nodeList.size());
			for (Node node : model.nodeList) {
				System.out.println(node.id + " " + node.type);
			}

			System.out.println();

			System.out.println(model.bizList.size());
			for (Biz biz : model.bizList) {
				System.out.println(biz.id + " " + biz.snode.id + " "
						+ biz.snode.type + " " + biz.tnode.id + " "
						+ biz.tnode.type);
			}

			return model;
		} catch (JAXBException e) {
			e.printStackTrace();
			return null;
		}
	}

	public static void write(Model model) {
		try {
			JAXBContext jc = JAXBContext.newInstance("test.jaxb");
			Marshaller m = jc.createMarshaller();

			ObjectFactory factory = new ObjectFactory();
			Xmodel Xmodel = factory.createXmodel();

			for (Node node : model.nodeList) {
				Xnode Xnode = factory.createXnode();
				Xnode.setId(node.id);
				Xnode.setType(node.type);

				Xmodel.getXnodes().getXnode().add(Xnode);
			}

			Xmodel.setXbizs(factory.createXbizs());
			for (Biz biz : model.bizList) {
				Xbiz bizType = factory.createXbiz();
				bizType.setId(biz.id);
				bizType.setSnode(biz.snode.id);
				bizType.setTnode(biz.tnode.id);

				Xmodel.getXbizs().getXbiz().add(bizType);
			}

			m.marshal(Xmodel, new File(
					"C:\\write.xml"));
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}
打印结果:
3
n1 node2
n2 node3
n3 node4

2
b1 n1 node2 n2 node3
b2 n3 node4 n1 node2
分享到:
评论

相关推荐

    Java读写xml java 读写xml文件操作, 简单易懂

    ### Java读写XML文件操作详解 在现代软件开发中,XML(可扩展标记语言)是一种广泛使用的数据交换格式,尤其在处理配置文件、数据存储以及跨平台数据交换时显得尤为重要。Java提供了多种读写XML文件的方法,包括SAX...

    java读写xml文件的方法

    ### Java读写XML文件的方法详解 #### 一、概述 在Java编程中,XML(Extensible Markup Language,可扩展标记语言)是一种广泛使用的数据交换格式。由于其良好的跨平台特性和自描述性,使得XML成为了许多应用程序...

    Java与XML读写之DOM篇

    下面将详细阐述DOM模型、解析过程以及如何在Java中使用DOM进行XML读写。 DOM模型的核心概念是节点(Node)。XML文档的每个部分——元素(Element)、属性(Attribute)、文本(Text)等都被表示为一个节点对象。DOM...

    Java与XML数据绑定

    在XML数据绑定中,Java Bean充当了数据模型的角色,其属性对应于XML文档中的元素或属性。 JAXB的核心功能包括: 1. **序列化**:将Java对象转换为XML文档。通过JAXBContext实例,我们可以获取Marshaller对象,然后...

    c#和java读写xml辅助工具

    综上所述,无论是在C#还是Java中,都有多种高效且灵活的方法来读写XML文件。选择哪种方法取决于具体的需求,如文件大小、性能要求、代码简洁性等。使用适当的辅助工具,可以显著提高开发效率并降低出错概率。在实际...

    XML.rar_XML java_java call_java xml_xml 读写_xml读写 java

    至于“xml读写_java”,Java提供了多种方式来读写XML文件。使用DOM解析器,可以创建DocumentBuilder实例,然后使用parse()方法解析XML文件得到Document对象,再通过getElementsByTagname()等方法获取元素,最后用...

    JAVA和XML数据绑定 经典PDF

    Java和XML数据绑定是将XML文档中的数据与Java对象模型之间建立映射关系的技术,使得开发者可以方便地在XML和Java对象之间进行数据交换。这项技术对于处理XML数据的Java应用来说至关重要,尤其是在Web服务、配置文件...

    java操纵xml文件的读写,并根据xml生成树型菜单

    ### Java操作XML文件读写与树型...通过上述分析,我们不仅了解了如何使用Java和JDOM库读写XML文件,还探讨了基于XML数据生成树型菜单的基本思路。这对于开发需要处理复杂结构化数据的应用程序来说是非常有用的技能。

    java读写xml文件

    本示例中,我们关注的是JDOM库,它为XML文档提供了简单而直接的API,使得读写XML文件变得更加方便。下面我们将详细探讨如何使用JDOM进行XML文件的操作。 首先,为了读取XML文件,我们需要引入JDOM库。在Java项目中...

    Java读写xml文档

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、自解释性和易于解析的特点广泛应用于软件...实践是学习的最佳途径,尝试编写读写XML的程序,将有助于你更好地掌握DOM4J的用法。

    用java读写xml文件

    ### 使用Java进行XML文件的读写 #### 一、引言 XML(Extensible Markup Language,可扩展标记语言)是一种非常流行的用于存储和传输数据的标准格式。它具有良好的跨平台特性,易于理解和处理,因此在数据交换场景中...

    java_rean_writer_xml.rar_JSP读写XML_XML java_java Writer xml_java

    在Java Web开发中,XML...总之,JSP中读写XML文件是常见的需求,通过DOM和SAX解析器,以及JavaBean封装,我们可以方便地处理XML数据。同时,了解XML与SOAP在Web服务中的应用,也是提升Java Web开发能力的重要一环。

    DOM、SAX、JDOM、DOM4J读写xml文档

    XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、Web服务和数据存储等领域。在Java中,有几种不同的API可以用来处理XML文档,包括DOM、SAX、JDOM和DOM4J。下面将详细...

    Java xml 文档读写

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,尤其在Java应用程序中,XML的读写操作是常见的数据处理任务。本篇将深入探讨Java中XML文档的读写方法,包括直接读写、DOM...

    Java+XML通讯录

    反之,当用户对通讯录进行操作时,Java程序也会更新XML文件以保持数据的一致性。 为了实现Java与XML之间的交互,开发者可能使用了Java API for XML Processing (JAXP) 或者DOM4J等库。JAXP提供了解析和生成XML文档...

    一种XML数据库的数据模型PDF,深层次讲解XML

    - **访问控制**:限制用户对XML数据的读写权限。 - **加密**:对敏感数据进行加密,保护信息安全。 7. **应用场景**: - **Web服务**:XML用于描述Web服务接口(如WSDL)和数据交换(如SOAP)。 - **数据集成**...

    java and xml 3rd edition 3

    3. StAX API:介于DOM和SAX之间,提供了一种流式读写XML的方式,允许开发者以迭代的方式处理XML,既节省内存又具有一定的灵活性。 4. JAXB:Java架构绑定工具可以将XML Schema自动映射为Java类,使得XML数据和Java...

    java创建xml对象

    对于复杂的对象模型,JAXB大大简化了XML的处理。首先,需要定义一个Java类来映射XML元素,然后使用`javax.xml.bind.JAXBContext`和`Marshaller`、`Unmarshaller`进行转换。 ```java JAXBContext context = ...

    java四种xml读写demo

    在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和传输结构化数据。本文将深入探讨Java中处理XML的四种常见方法:DOM(Document Object Model)、SAX(Simple API for XML...

Global site tag (gtag.js) - Google Analytics