使用Java解组XML字符串

时间:2014-08-12 11:31:42

标签: java xml unmarshalling

您好我正在使用java编写XML响应字符串的解组脚本。我已经提到了xml响应,解组代码和我收到的错误。 请帮助解决问题,并就此问题向我提出建议。

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
javax.xml.bind.Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new StreamSource(new     StringReader(response.toString() ) ) );
System.out.println(customer.getNAME());


Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"response"). Expected elements are <{}customer>

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <control>
        <status>success</status>
        <senderid>XXXX</senderid>
        <controlid>ControlIdHere</controlid>
        <uniqueid>false</uniqueid>
        <dtdversion>3.0</dtdversion>
  </control>
  <operation>
        <authentication>
              <status>XXXX</status>
              <userid>XXXX</userid>
              <companyid>XXXXXX</companyid>
              <sessiontimestamp>2014-08-12T03:49:00-07:00</sessiontimestamp>
        </authentication>
        <result>
              <status>success</status>
              <function>readByQuery</function>
              <controlid>testControlId</controlid>
              <data listtype="customer" count="26" totalcount="26" numremaining="0">
                    <customer>
                          <RECORDNO>15</RECORDNO>
                          <CUSTOMERID>RIC001</CUSTOMERID>
                          <NAME>XYZ</NAME>
                          <ENTITY>CRIC001</ENTITY>
                          <PARENTKEY></PARENTKEY>
                          <PARENTID></PARENTID>
                          <PARENTNAME></PARENTNAME>
                       </customer>
            <customer>
                          <RECORDNO>15</RECORDNO>
                          <CUSTOMERID>RIC001</CUSTOMERID>
                          <NAME>BBB</NAME>
                          <ENTITY>CRIC001</ENTITY>
                          <PARENTKEY></PARENTKEY>
                          <PARENTID></PARENTID>
                          <PARENTNAME></PARENTNAME>
                       </customer>
                                      </data>
        </result>
  </operation>

5 个答案:

答案 0 :(得分:3)

问题是你告诉unmarshaller你想要一个Customer对象,并且会给出一个表示Customer的XML字符串,但是你传递的是一个表示{{1}的XML字符串对象。如果您有Response类,请使用它来创建Response实例。如果没有,请在响应中获取表示JAXBContext对象的字符串

Customer

并与unmarshaller一起使用。

== 更新 ==
假设您没有<customer> <name>ABC</name> <country>India<country> </customer> Response类,则可以使用类似于以下内容的代码;

Data

答案 1 :(得分:2)

您目前正在尝试将使用<response>标记打开的XML转换为Customer对象。

您需要专门为JAXBUnmarshaller提供元素才能使其正常工作。例如:

<customer>
      <name>ABC</name>
      <country>India<country>
</customer>

答案 2 :(得分:1)

XML字符串不是有效的XML(缺少结束标记),但我认为发布问题时会出错?

当解组到Customer对象时,看起来JAXB不期望<response>根元素。 Customer类是什么样的?

答案 3 :(得分:1)

在您到达customer元素之前,请查看此问题如何遍历XML。从那里你可以解组XML:

How to get a particular element through JAXB xml parsing?

答案 4 :(得分:-2)

必须使用

声明Java类

@XmlRootElement 类响应