java解析XML,
分享于 点击 18022 次 点评:166
java解析XML,
废话不多说。
一个简单的解析xml,希望对某些朋友有所借鉴。
新建立一个web的工程,测试使用。
把这些jar包放入lib下
测试解析的xml如下:
<?xml version="1.0" encoding="utf-8"?>
<glass version="123">
<work>
<job>
<id>job0001</id>
<workId>work0001</workId>
<name>GS01</name>
<type>abedo1</type>
<tag>mod09GA0</tag>
<rule>
<start>2000-1-1</start>
<timeUnit>year</timeUnit>
<timeLength>1</timeLength>
<stop>2005-12-32</stop>
</rule>
<rule>
<start>2006-1-1</start>
<timeUnit>month</timeUnit>
<timeLength>6</timeLength>
<stop>2009-12-31</stop>
</rule>
</job>
<job>
<id>job0002</id>
<workId>work0002</workId>
<name>GS02</name>
<type>abedo2</type>
<tag>mod09GA1</tag>
<rule>
<start>2000-1-1</start>
<timeUnit>year</timeUnit>
<timeLength>2</timeLength>
<stop>2005-12-32</stop>
</rule>
<rule>
<start>2006-1-1</start>
<timeUnit>month</timeUnit>
<timeLength>7</timeLength>
<stop>2009-12-31</stop>
</rule>
</job>
</work>
</glass>
建立一个解析需要的xsd
同时注意将namespace相关清除(如果规范由我们定 可以有namespace 但是这个生成的xml与规范中是不同的会加带namespace)
建立需要的Typs
xsd代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="glass">
<xsd:sequence>
<xsd:element name="work" type="work"></xsd:element>
</xsd:sequence>
<xsd:attribute name="version" type="xsd:string"></xsd:attribute>
</xsd:complexType>
<xsd:complexType name="work">
<xsd:sequence>
<xsd:element name="job" type="job"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="job">
<xsd:sequence>
<xsd:element name="id" type="xsd:string"></xsd:element>
<xsd:element name="workId" type="xsd:string"></xsd:element>
<xsd:element name="name" type="xsd:string"></xsd:element>
<xsd:element name="type" type="xsd:string"></xsd:element>
<xsd:element name="tag" type="xsd:string"></xsd:element>
<xsd:element name="rule" type="rule"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="rule">
<xsd:sequence>
<xsd:element name="start" type="xsd:string"></xsd:element>
<xsd:element name="timeUnit" type="xsd:string"></xsd:element>
<xsd:element name="timeLength" type="xsd:string"></xsd:element>
<xsd:element name="stop" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="glass" type="glass"></xsd:element>
</xsd:schema>
把xsd拷贝到c:下一份
写好xsd文件后用xjc工具来帮助我们生成XSD对应的java映射类、点击运行选择当前的工程 同时注意那两个勾勾上然后点击serach
后输入xjc会看见XJCFacade 点击ok7
Ok 解析类生成成功!!!
主要生成的代码可能少根节点标记如果少了主要添加:
Glass::
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.6 生成的
// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2014.03.07 时间 04:41:12 PM CST
//
package com.neusoft.test.jaxd;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>glass complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="glass">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="work" type="{}work"/>
* </sequence>
* <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}string" />
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "glass", propOrder = {
"work"
})
@XmlRootElement(name="glass")
public class Glass {
@XmlElement(required = true)
protected Work work;
@XmlAttribute(name = "version")
protected String version;
/**
* 获取work属性的值。
*
* @return
* possible object is
* {@link Work }
*
*/
public Work getWork() {
return work;
}
/**
* 设置work属性的值。
*
* @param value
* allowed object is
* {@link Work }
*
*/
public void setWork(Work value) {
this.work = value;
}
/**
* 获取version属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getVersion() {
return version;
}
/**
* 设置version属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setVersion(String value) {
this.version = value;
}
}
Job
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.6 生成的
// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2014.03.07 时间 04:41:12 PM CST
//
package com.neusoft.test.jaxd;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>job complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="job">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="workId" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="type" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="tag" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="rule" type="{}rule"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "job", propOrder = {
"id",
"workId",
"name",
"type",
"tag",
"rule"
})
public class Job {
@XmlElement(required = true)
protected String id;
@XmlElement(required = true)
protected String workId;
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected String type;
@XmlElement(required = true)
protected String tag;
@XmlElement(required = true)
protected Rule rule;
/**
* 获取id属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getId() {
return id;
}
/**
* 设置id属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setId(String value) {
this.id = value;
}
/**
* 获取workId属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getWorkId() {
return workId;
}
/**
* 设置workId属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setWorkId(String value) {
this.workId = value;
}
/**
* 获取name属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getName() {
return name;
}
/**
* 设置name属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setName(String value) {
this.name = value;
}
/**
* 获取type属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getType() {
return type;
}
/**
* 设置type属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setType(String value) {
this.type = value;
}
/**
* 获取tag属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTag() {
return tag;
}
/**
* 设置tag属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTag(String value) {
this.tag = value;
}
/**
* 获取rule属性的值。
*
* @return
* possible object is
* {@link Rule }
*
*/
public Rule getRule() {
return rule;
}
/**
* 设置rule属性的值。
*
* @param value
* allowed object is
* {@link Rule }
*
*/
public void setRule(Rule value) {
this.rule = value;
}
}
ObjectFactory
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.6 生成的
// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2014.03.07 时间 04:41:12 PM CST
//
package com.neusoft.test.jaxd;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
/**
* This object contains factory methods for each
* Java content interface and Java element interface
* generated in the com.neusoft.test.jaxd package.
* <p>An ObjectFactory allows you to programatically
* construct new instances of the Java representation
* for XML content. The Java representation of XML
* content can consist of schema derived interfaces
* and classes representing the binding of schema
* type definitions, element declarations and model
* groups. Factory methods for each of these are
* provided in this class.
*
*/
@XmlRegistry
public class ObjectFactory {
private final static QName _Glass_QNAME = new QName("", "glass");
/**
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.neusoft.test.jaxd
*
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link Glass }
*
*/
public Glass createGlass() {
return new Glass();
}
/**
* Create an instance of {@link Work }
*
*/
public Work createWork() {
return new Work();
}
/**
* Create an instance of {@link Rule }
*
*/
public Rule createRule() {
return new Rule();
}
/**
* Create an instance of {@link Job }
*
*/
public Job createJob() {
return new Job();
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Glass }{@code >}}
*
*/
@XmlElementDecl(namespace = "", name = "glass")
public JAXBElement<Glass> createGlass(Glass value) {
return new JAXBElement<Glass>(_Glass_QNAME, Glass.class, null, value);
}
}
Rule
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.6 生成的
// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2014.03.07 时间 04:41:12 PM CST
//
package com.neusoft.test.jaxd;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>rule complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="rule">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="start" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="timeUnit" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="timeLength" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="stop" type="{http://www.w3.org/2001/XMLSchema}string"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "rule", propOrder = {
"start",
"timeUnit",
"timeLength",
"stop"
})
public class Rule {
@XmlElement(required = true)
protected String start;
@XmlElement(required = true)
protected String timeUnit;
@XmlElement(required = true)
protected String timeLength;
@XmlElement(required = true)
protected String stop;
/**
* 获取start属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getStart() {
return start;
}
/**
* 设置start属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setStart(String value) {
this.start = value;
}
/**
* 获取timeUnit属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTimeUnit() {
return timeUnit;
}
/**
* 设置timeUnit属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTimeUnit(String value) {
this.timeUnit = value;
}
/**
* 获取timeLength属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getTimeLength() {
return timeLength;
}
/**
* 设置timeLength属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setTimeLength(String value) {
this.timeLength = value;
}
/**
* 获取stop属性的值。
*
* @return
* possible object is
* {@link String }
*
*/
public String getStop() {
return stop;
}
/**
* 设置stop属性的值。
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setStop(String value) {
this.stop = value;
}
}
Work
//
// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.6 生成的
// 请访问 <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
// 生成时间: 2014.03.07 时间 04:41:12 PM CST
//
package com.neusoft.test.jaxd;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>work complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="work">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="job" type="{}job"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "work", propOrder = {
"job"
})
public class Work {
@XmlElement(required = true)
protected Job job;
/**
* 获取job属性的值。
*
* @return
* possible object is
* {@link Job }
*
*/
public Job getJob() {
return job;
}
/**
* 设置job属性的值。
*
* @param value
* allowed object is
* {@link Job }
*
*/
public void setJob(Job value) {
this.job = value;
}
}
下面编写测试代码:
MyTest
package com.neusoft.test.myTest;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.neusoft.test.jaxd.Glass;
public class MyTest
{
/**
* @param args
*/
public static void main(String[] args)
{
//TODO 需要写出方法的具体实现
String myXml="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<glass version=\"123\">" +
"<work>" +
"<job><id>job0001</id><workId>work0001</workId><name>GS01</name><type>abedo</type>" +
"<tag>mod09GA</tag>" +
"<rule><start>2000-1-1</start><timeUnit>year</timeUnit><timeLength>1</timeLength><stop>2005-12-32</stop></rule>" +
"<rule>" +
"<start>2006-1-1</start>" +
"<timeUnit>month</timeUnit>" +
"<timeLength>6</timeLength>" +
"<stop>2009-12-31</stop></rule>" +
"</job>" +
"<job><id>job0002</id><workId>work0002</workId><name>GS02</name><type>abedo</type>" +
"<tag>mod09GA</tag>" +
"<rule><start>2000-1-1</start><timeUnit>year</timeUnit><timeLength>1</timeLength><stop>2005-12-32</stop>" +
"</rule>" +
"<rule>" +
"<start>2006-1-1</start><timeUnit>month</timeUnit><timeLength>6</timeLength>" +
"<stop>2009-12-31</stop>" +
"</rule></job></work></glass>";
//TODO 需要写出方法的具体实现
JAXBContext jaxbContent;
Glass glass ;
try
{
jaxbContent = JAXBContext.newInstance(Glass.class);
Unmarshaller m = jaxbContent.createUnmarshaller();
glass = (Glass)m.unmarshal(new StringReader(myXml));
System.out.println(myXml);
System.out.println(glass.getVersion());
System.out.println(glass.getWork().getJob().getId());
} catch (JAXBException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ok 成功解析
相关文章
- 暂无相关文章
用户点评