XMLからJavaオブジェクトを作成する方法を学び始めました。しかし、今私はトリッキーな入力を持っており、私はそれを解決する方法を本当に知りません。Javaでxmlファイルを読む - 選択した要素のみ
これは、入力された:
<?xml version="1.0" encoding="UTF-8"?>
<return>
<productChange cd_product="711" ds_product="MBL40337 I151 BLACK P" cd_species="UN" cd_tipi="61062000" cd_cst="5" qt_weight="" cd_nbm="" dt="2016-05-04 11:47:36">
<productvalue cd_company="1" cd_product="711" tp_value="P" cd_value="1" vl_product="61.39">
<tipovaluePrd tp_value="P" cd_value="1" ds_value="SALE" cd_corrency="1" />
</productvalue>
<productvalue cd_company="1" cd_product="711" tp_value="P" cd_value="4" vl_product="129.8">
<tipovaluePrd tp_value="P" cd_value="4" ds_value="SALE STORE" cd_corrency="1" />
</productvalue>
<productvalue cd_company="1" cd_product="711" tp_value="P" cd_value="5" vl_product="64.9">
<tipovaluePrd tp_value="P" cd_value="5" ds_value="SALE AT" cd_corrency="1" />
</productvalue>
<productvalue cd_company="1" cd_product="711" tp_value="P" cd_value="8" vl_product="122.78">
<tipovaluePrd tp_value="P" cd_value="8" ds_value="SALE FQ" cd_corrency="1" />
</productvalue>
</productChange>
</return>
JAXB(サードパーティの会社が提供するXML)と、このXMLを消費するために、私は次のクラス構築しました:しかし、主な情報を
@XmlAccessorType(XmlAccessType.FIELD)
public class ProductUpdateResponse {
@XmlAttribute(name = "cd_product")
private Integer productCode;
@XmlAttribute(name = "ds_product")
private String productDescription;
@XmlAttribute(name = "cd_species")
private String productSpecie;
@XmlAttribute(name = "cd_tipi")
private Integer productTIPI;
@XmlAttribute(name = "cd_cst")
private Integer productCST;
@XmlAttribute(name = "qt_weight")
private String productWeight;
@XmlAttribute(name = "cd_nbm")
private String productNBM;
@XmlAttribute(name = "dt")
private String productDate;
@XmlElement(name = "productvalue")
private ProductValueType productValue;
// getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class ProductValue {
@XmlAttribute(name = "cd_product")
private Integer productCode;
@XmlAttribute(name = "cd_company")
private Integer companyCode;
@XmlAttribute(name = "tp_value")
private String valueType;
@XmlAttribute(name = "cd_value")
private Integer valueCode;
@XmlAttribute(name = "vl_product")
private BigDecimal productValue;
@XmlElement(name = "tipovaluePrd")
private ProductValueType productValueType;
//getters and seters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class ProductValueType {
@XmlAttribute(name = "tp_value")
private String valueType;
@XmlAttribute(name = "cd_value")
private String valueCode;
@XmlAttribute(name = "ds_value")
private String valueDescription;
@XmlAttribute(name = "cd_corrency")
private Integer valueCurrency;
//getters and seters
}
を、私のためには、ヌルとして来ている(productvalue)xmlに4つのタグproductvalueがあるので、私はそれがあるのだろうか(私はtipovaluePrd.cd_value
が4
です)が必要です。以下は
私はXMLを解析するために使用している方法です。特に私は(tipovaluePrd.cd_value = 4
を持ってproductvalue
要素を)したい値を読み取るための方法があるかどうか、私は疑問に思う、だから、
private ProductUpdateResponse buildResponse(String rawResponse, Class<T> responseClass) {
JAXBContext jaxbContext = null;
try {
jaxbContext = JAXBContext.newInstance(responseClass);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(rawResponse);
return (ProductUpdateResponse) unmarshaller.unmarshal(reader);
} catch (JAXBException | ClassCastException e) {
return null;
}
}
とどのようにできました私がする。そうでなければ、私はクラスをどのようにしてすべてを正しく読むことができるのでしょうか?入力を変更
は...ここに任意の助けを事前に
おかげオプションではありません。
あなたは必要ありません:EclipseLinkのJAXBの実装を使用すると、XPathの要求に応じてオブジェクトをバインドすることができます@XmlPath注釈を実装しています:あなたはJAXBの実装を変更するために喜んでいる場合
これのためにjaxb。 javax.xml.xpathを使用することができます。 – SomeDude