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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我用Spring5的aop应用时报这个错误Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\ecliple\web5\WEB-INF\applicationContext.xml]; nested exception is java.nio.file.NoSuchFileException: WEB-INF\applicationContext.xml,他说我的applicationContext.xml文件不存在,可是我明明有这个文件,另外我的web.xml需要更改吗<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation </param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <display-name>Struts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> <!--2.5版本的写法 --> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
最新发布
05-30

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值