简体   繁体   English

使用Jackson将包含模式和数据的Xml转换为Java对象

[英]Convert Xml containing both schema and data into java object using Jackson

I have tried Jackson API to parse below XML into java object but it did not work. 我尝试了Jackson API将XML下面的XML解析为java对象,但是它没有用。 I only want object that represents the student record . 我只想要代表学生记录的对象。 Can anybody help me with this? 有人可以帮我吗? For standard xml format, the Jackson API works but for the below example I am not able to do so 对于标准xml格式,Jackson API可以使用,但是对于以下示例,我无法这样做

  <?xml version="1.0" encoding="utf-8"?> <DataTable xmlns="http://*****.com"> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="StudentRecord" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="StudentRecord"> <xs:complexType> <xs:sequence> <xs:element name="StudentId" type="xs:string" minOccurs="0" /> <xs:element name="FName" type="xs:string" minOccurs="0" /> <xs:element name="LName" type="xs:string" minOccurs="0" /> <xs:element name="Address1" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <DocumentElement xmlns=""> <StudentRecord diffgr:id="StudentRecord1" msdata:rowOrder="0"> <StudentId>&&&&&&&</StudentId> <FName>ABC</FName> <LName>DSF</LName> <Address1>12345</Address1> </StudentRecord> </DocumentElement> </diffgr:diffgram> </DataTable> 

SimpleXml can do it, first 1 POJO: SimpleXml可以做到,首先1个POJO:

public class StudentRecord {
    @XmlAttribute
    @XmlName("diffgr:id")
    public String id;
    @XmlAttribute
    @XmlName("msdata:rowOrder")
    public int rowOrder;
    @XmlName("StudentId")
    public String studentId;
    @XmlName("FName")
    public String firstName;
    @XmlName("LName")
    public String lastName;
    @XmlName("Address1")
    public String address1;
}

Next we turn the XML into a DOM, then we grab the element we need and convert that element to our class. 接下来,我们将XML转换为DOM,然后获取所需的元素并将其转换为类。

final SimpleXml simple = new SimpleXml();
final Element root = simple.fromXml(xml);
final StudentRecord student = simple.fromXml(root.children.get(1).children.get(0).children.get(0), StudentRecord.class);
System.out.println(student.id + " : " + student.firstName + " " + student.lastName);

This code will print: 此代码将打印:

StudentRecord1 : ABC DSF

SimpleXml is in maven central: SimpleXml位于Maven中央:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.5.5</version>
</dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM