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")