使用jaxb读取xml文档 [英] reading xml document using jaxb

查看:62
本文介绍了使用jaxb读取xml文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用jaxb读取xml并尝试创建解析器。我对我编写java bean及其中的注释的方式有些怀疑。我知道我所做的是错误的,因为我收到了非法的注释错误。

I am trying to read in xml using jaxb and have had a shot at creating a parser. I'm having some doubts about the way I have structured my java beans and the annotations in them. I know what I have done is wrong because I'm getting illegal annotation errors.

我能不能得到一些关于如何编写bean和注释以允许jax b的帮助做这件事并解析我的xml。

Could I please get some help on how to write the beans and annotations to allow jax b to do it's thing and parse my xml.

谢谢(对不起,很长的帖子,但希望它能帮助别人)

thanks (sorry for the long post but hopefully it will help others)

我简化的xml文档看起来像这样......

My simplified xml document looks like this...

<WEB-ITM-EXT-REC>
   <ACTVTY-CODE>A</ACTVTY-CODE>
   <WEB-ITM-EXT-DATA>
     <ITEM-NO>93501250080</ITEM-NO>
     <PROMOTION-DETAILS>
       <PROMOTION-ID></PROMOTION-ID>
       <PROMOTION-START-DATE>0</PROMOTION-START-DATE>
       <PROMOTION-END-DATE>0</PROMOTION-END-DATE>
       <PROMOTION-PRICE>.00</PROMOTION-PRICE>
     </PROMOTION-DETAILS>
     <NORMAL-SELL-PRICES>
       <SELL-PRICE-EFFECTIVE-DATE-1>0</SELL-PRICE-EFFECTIVE-DATE-1>
       <SELL-PRICE-1>.00</SELL-PRICE-1>
       <SELL-PRICE-EFFECTIVE-DATE-2>0</SELL-PRICE-EFFECTIVE-DATE-2>
       <SELL-PRICE-2>.00</SELL-PRICE-2>
       <SELL-PRICE-EFFECTIVE-DATE-3>0</SELL-PRICE-EFFECTIVE-DATE-3>
       <SELL-PRICE-3>189.95</SELL-PRICE-3>
     </NORMAL-SELL-PRICES>
     <OUT-OF-STOCK-IND>Y</OUT-OF-STOCK-IND>
   </WEB-ITM-EXT-DATA>
 </WEB-ITM-EXT-REC>

这是我编写java bean的方式......

Here is the way I have written my java beans...

@XmlRootElement(name = "WEB-ITM-EXT-REC")
public class ItemDocuments {

    @XmlElement(name="ACTVTY-CODE")
    private String activityCode;

    @XmlElement(name="WEB-ITM-EXT-DATA")
    private List<ItemDocument> itemDocuments;

    public List<ItemDocument> getItemDocuments() {
        return itemDocuments;
    }

    public void setItemDocuments(List<ItemDocument> itemDocuments) {
        this.itemDocuments = itemDocuments;
    }

    public String getActivityCode() {
        return activityCode;
    }

    public void setActivityCode(String activityCode) {
        this.activityCode = activityCode;
    }
}

项目bean

@XmlRootElement(name = "WEB-ITM-EXT-DATA")
@XmlAccessorType(XmlAccessType.FIELD)
public class ItemDocument {

    @XmlElement(name="ITEM-NO")
    private String itemNo;
    private PromotionDocument promotion;
    private SellPriceDocument sellPrice;
    @XmlElement(name="OUT-OF-STOCK-IND")
    private String outOfStockInd;  

        getters..
        setters...
}

卖出价格

@XmlType
public class SellPriceDocument {

    @XmlElement(name="SELL-PRICE-EFFECTIVE-DATE-1")
    private String sellPriceEffectiveDateOne;
    @XmlElement(name="SELL-PRICE-1")
    private String sellPriceOne;
    @XmlElement(name="SELL-PRICE-EFFECTIVE-DATE-2")
    private String sellPriceEffectiveDateTwo;
    @XmlElement(name="SELL-PRICE-2")
    private String sellPriceTwo;
    @XmlElement(name="SELL-PRICE-EFFECTIVE-DATE-3")
    private String sellPriceEffectiveDateThree;
    @XmlElement(name="SELL-PRICE-3")
    private String sellPriceThree;

    getters..
    setters...
}

促销Bean

public class PromotionDocument {

    @XmlElement(name="PROMOTION-ID")
    private String promotionId;

    @XmlElement(name="PROMOTION-START-DATE")
    private String promotionStartDate;

    @XmlElement(name="PROMOTION-END-DATE")
    private String promotionEndDate;

    @XmlElement(name="PROMOTION-PRICE")
    private String promotionPrice;

   getters..
   setters...
}


推荐答案

您已使用@XmlRootElement注释了两个类(ItemDocuments和ItemDocument)。您应该只有一个@XmlRootElement(根据标准 http://www.w3.org/TR / REC-xml / )因为这定义了一个文档。并查看您想要生成的xml。我建议关注

You have annotated two classes (ItemDocuments and ItemDocument) with @XmlRootElement . You should only have one @XmlRootElement (acccording to standards http://www.w3.org/TR/REC-xml/) because this defines a document. And looking at the xml you want to produce. I suggest following

@XmlRootElement(name = "WEB-ITM-EXT-REC")
@XmlAccessorType(XmlAccessType.FIELD)
public class ItemDocuments {

    @XmlElement(name = "WEB-ITM-EXT-DATA")
    public List<ItemDocument> itemDocumentList = new ArrayList<ItemDocument>();

    public List<ItemDocument> getItemDocumentList() {
        return itemDocumentList;
    }

    public void setItemDocumentList(List<ItemDocument> itemDocumentList) {
        this.itemDocumentList = itemDocumentList;
    }
}

ss

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class ItemDocument {

    @XmlElement(name = "ITEM-NO")
    private String itemNo;

    public String getItemNo() {
        return itemNo;
    }

    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }

}

这将产生xml,如

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<WEB-ITM-EXT-REC>
    <WEB-ITM-EXT-DATA>
        <ITEM-NO>1111</ITEM-NO>
    </WEB-ITM-EXT-DATA>
    <WEB-ITM-EXT-DATA>
        <ITEM-NO>2222</ITEM-NO>
    </WEB-ITM-EXT-DATA>
</WEB-ITM-EXT-REC>

所以xsd看起来像

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="WEB-ITM-EXT-REC" type="itemDocuments"/>

  <xs:complexType name="itemDocuments">
    <xs:sequence>
      <xs:element name="WEB-ITM-EXT-DATA" type="itemDocument" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="itemDocument">
    <xs:sequence>
      <xs:element name="ITEM-NO" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

这应该足以让你开始。如果您在ItemDocument中使用SellpriceDocument和PromotionDocument时遇到问题,请告诉我。

This should give you enough to start. Let me know if you have problem using SellpriceDocument and PromotionDocument in ItemDocument.

这篇关于使用jaxb读取xml文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆