2014-09-13 59 views
2

这是我的xml,需要将它转换为java。我用了JAXBjaxb unmarshalling with namespace

<?xml version="1.0"?> 
<lm:order Id="PLG24M240U" JD="" aCount="2" SUCount="1" xmlns:lm="http://www.ae.com/Event/Load"> 
    <lm:master> 
    <lm:ID>3</lm:ID> 
    <lm:Number>313</lm:Number> 
    <lm:ANumber>323</lm:ANumber>  
    </lm:master> 
    <lm:detail> 
    <lm:ID>3</lm:ID> 
    <lm:Number>3131</lm:Number> 
    <lm:ANumber>3232</lm:ANumber>  
    </lm:detail> 
<lm:detail> 
    <lm:ID>3</lm:ID> 
    <lm:Number>3131</lm:Number> 
    <lm:ANumber>3232</lm:ANumber>  
    </lm:detail> 
    <lm:detail> 
    <lm:ID>3</lm:ID> 
    <lm:Number>313</lm:Number> 
    <lm:ANumber>323</lm:ANumber>  
    </lm:detail> 
</lm:order> 

和投掷以下异常 javax.xml.bind.UnmarshalException:意外的元素(URI: “http://www.ae.com/Event/Load”,地方: “订单”)。预计元素< {} LM:订单>

这是我的解组代码

jaxbContext = JAXBContext.newInstance(Order.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Order order = (Order) jaxbUnmarshaller.unmarshal(file); 
System.out.println(order); 

订购POJO类

import java.util.ArrayList; 
import java.util.List; 

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; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "lm:Order") 
public class OrderPay { 
    @XmlAttribute 
    private String Id; 
    @XmlAttribute 
    private String JD; 
    @XmlAttribute 
    private String aCount; 
    @XmlAttribute 
    private String pCount; 
    /*@XmlElement 
    private Master master; 
    @XmlElement 
    private List<Detail> details = new ArrayList<Detail>();*/ 

} 

能否请你帮我在读也,目前通过文件读取,需要阅读为XML字符串。

+0

@isim:雅它是一个错字,在代码中没有编译时错误。谢谢 – Rosh 2014-09-13 06:10:32

回答

5

命名空间属性xmlns:lm="http://www.ae.com/Event/Load"可能是这里的罪魁祸首。为了指定命名空间前缀,你可以在@XmlSchema注释添加到package-info.java文件是这样的:

@XmlSchema(
    namespace="http://www.ae.com/Event/Load", 
    elementFormDefault=XmlNsForm.QUALIFIED), 
    xmlns={@XmlNs(prefix="lm", namespaceURI="http://www.ae.com/Event/Load")}) 

package your.package; 
import javax.xml.bind.annotation.*; 
+0

亚那现在不存在错误。但是回应是无效的。 System.out.println(order.getACount);是null – Rosh 2014-09-13 06:17:34

+0

StringReader reader = new StringReader(“// whole xml”); jaxbContext = JAXBContext.newInstance(Order.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Order order =(Order)jaxbUnmarshaller.unmarshal(reader); System.out.println(order); – Rosh 2014-09-13 06:22:14

+0

@Rosh我在你的XML中看不到'aCount'属性;只有一个'Count'属性。他们应该是一样的吗? – 2014-09-13 06:24:39

相关问题