XML -> xsd -> Java

XML Schema Generator
http://www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx

http://www.flame-ware.com/products/xml-2-xsd/default.aspx


XSD to Java Object
xjc xxx.xsd -d src -p com.xxx

 

 比如有如下XML文件:

<?xml version="1.0" ?>
<customers>
	<customer>
		<number>0001</number>
		<name>小白</name>
		<score>88.0</score>
	</customer>
	<customer>
		<number>0002</number>
		<name>小红</name>
		<score>90.0</score>
	</customer>
	<customer>
		<number>0003</number>
		<name>小黑</name>
		<score>66.0</score>
	</customer>
	<customer>
		<number>0004</number>
		<name>小花</name>
		<score>77.0</score>
	</customer>
</customers>

 

使用上面给出的链接生成如下XSD:

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="customers" type="customers" />
  <xsd:complexType name="customers">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="customer" type="customer" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="customer">
    <xsd:sequence>
      <xsd:element name="number" type="xsd:int" />
      <xsd:element name="name" type="xsd:string" />
      <xsd:element name="score" type="xsd:decimal" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

 

再通过XJC工具将该XSD转换成对应的JAVA对象,那么我们就可以直接通过这些对象来获取到XML里面的数据了。下面为测试类代码:

package com.zzt.test;

import java.io.File;
import java.util.List;

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

import com.zzt.model.Customer;
import com.zzt.model.Customers;

public class XMLTest {
   
	public static void main(String[] args) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(Customers.class);
		Unmarshaller unmarshaller = context.createUnmarshaller();
		File file = new File("student.xml");
		Customers customers = (Customers)unmarshaller.unmarshal(file);
		List<Customer> cuList = customers.getCustomer();
		for (Customer customer : cuList) {
			System.out.println("number:"+customer.getNumber()+"  name:"+customer.getName()+" score:"+customer.getScore());
		}
	}
}

 

整个测试Demo可查看附件。另外通过Properties来配置数据,方式如下:

customers.customer1.number=001
customers.customer1.name=\u5C0F\u767D
customers.customer1.score=88.0
customers.customer2.number=002
customers.customer2.name=\u5C0F\u7EA2
customers.customer2.score=90.0
customers.customer3.number=003
customers.customer3.name=\u5C0F\u9ED1
customers.customer3.score=66.0
customers.customer4.number=004
customers.customer4.name=\u5C0F\u82B1
customers.customer4.score=77.0

 

对应的从该属性文件中读取数据的Demo:

package com.zzt.test.properties;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;

public class PropertiesTest {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		PropertiesTest test = new PropertiesTest();
		Properties properties = test.getProperties("student.properties");
		for (int i = 0; i < properties.size() / 3; i++) {
			System.out.println(properties.getProperty("customers.customer"+(i+1)+".number")
					+ "\t" + properties.getProperty("customers.customer"+(i+1)+".name")
					+ "\t" + properties.getProperty("customers.customer"+(i+1)+".score"));
		}

	}

	public Properties getProperties(String file) throws IOException {
		Properties properties = new Properties();
		InputStream fis = null;
		try {
			ResourceLoader loader = new DefaultResourceLoader();
			fis = loader.getResource(file).getInputStream();
			properties.load(fis);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fis != null) {
				fis.close();
			}
		}
		return properties;
	}
}

 

 

对于项目:

使用第一个链接,然后 选择 Separate Complex Types, 讲 Type" 替换为 " (去掉Type)

在执行上面操作时,可以直接看XML里面是否含有Type属性,如果没有就可以全部替换。

 

生成POJO之后,手动添加根节点,比如:

@XmlRootElement(name = "TestCases")

你可能感兴趣的:(java)