[Java] JAXB要素への属性の追加


Answers

注:私はEclipseLink JAXB(MOXy)のリードであり、JAXB 2.X( JSR-222 )の専門家グループのメンバーです。

あるいは、 @XmlPath拡張を使用してこのユースケースを処理することもできます。

DataClass

@XmlPathアノテーションは、標準のJAXBアノテーションとともに使用できます。

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="DataClass")
@XmlType(propOrder={"myElement", "anotherElement"})
public class DataClass {

    private String myElement;
    private String myElementThisAtt;
    private String anotherElement;
    private String anotherElementThisAtt;

    public String getMyElement() {
        return myElement;
    }

    public void setMyElement(String myElement) {
        this.myElement = myElement;
    }

    @XmlPath("myElement/@thisAtt")
    public String getMyElementThisAtt() {
        return myElementThisAtt;
    }

    public void setMyElementThisAtt(String myElementThisAtt) {
        this.myElementThisAtt = myElementThisAtt;
    }

    public String getAnotherElement() {
        return anotherElement;
    }

    public void setAnotherElement(String anotherElement) {
        this.anotherElement = anotherElement;
    }

    @XmlPath("anotherElement/@thisAtt")
    public String getAnotherElementThisAtt() {
        return anotherElementThisAtt;
    }

    public void setAnotherElementThisAtt(String anotherElementThisAtt) {
        this.anotherElementThisAtt = anotherElementThisAtt;
    }

}

デモ

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(DataClass.class);

        DataClass dataClass = new DataClass();
        dataClass.setMyElement("This is better");
        dataClass.setMyElementThisAtt("this is what I'm talking about");
        dataClass.setAnotherElement("So is this");
        dataClass.setAnotherElementThisAtt("a different attribute here");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(dataClass, System.out);
    }
}

出力

<?xml version="1.0" encoding="UTF-8"?>
<DataClass>
   <myElement thisAtt="this is what I'm talking about">This is better</myElement>
   <anotherElement thisAtt="a different attribute here">So is this</anotherElement>
</DataClass>

詳しくは

Question

私はいくつかのJAXB解析に苦労しており、いくつかのガイダンスが必要です。

基本的には、@ XmlElementを使用してElementとして既に宣言しているクラス変数に属性を追加しようとしています。 今のところ@XmlAttributeを使用しようとすると、クラスレベルで属性が設定されます。

私が現在入手しているのはこれです:

<DataClass newAttribute="test">
  <myElement>I wish this element had an attribute</myElement>
  <anotherElement>I wish this element had an attribute too</anotherElement>
</DataClass>

私はこれをしたいと思います:

<DataClass>
  <myElement thisAtt="this is what I'm talking about">This is better</myElement>
  <anotherElement thisAtt="a different attribute here">So is this</anotherElement>
</DataClass>

私は他の投稿が@XmlValueを使用して単一の要素に属性を追加するのを見ましたが、要素を持つときには機能せず、複数の要素では機能しません。

これを達成する方法について誰かが考えていますか?

ありがとう! ジェイソン