Jaxb - как я могу демаршалировать один элемент xml на несколько полей? - PullRequest
3 голосов
/ 19 июля 2011

xml:

<root> <element>value (something)</element> </root>

Мне нужно отменить сортировку этого xml на два разных поля в моем классе Java.

Я попробовал следующее, но это не удалосьРабота.первое поле имело правильное значение, а второе - null.

java:

@XmlElement(name="element")
@XmlJavaTypeAdapter(TakeValueBeforeParentheses.class)
private String one;

@XmlElement(name="element")
@XmlJavaTypeAdapter(TakeValueInParentheses.class)
private String two;

Как этого добиться, не создавая класс для хранения обоих значений и сопоставляя его с элементом "«

Ответы [ 2 ]

8 голосов
/ 19 июля 2011

Вы можете аннотировать сеттеры, а не поля, а затем установить синтаксический анализ сеттера в два поля:

@XmlElement(name="element") 
void setElement(String value) {
    // parse value
    StringTokenizer st = new StringTokenizer(value, "()");
    this.one = st.nextToken().trim();
    this.two = st.nextToken().trim();
}
0 голосов
/ 19 июля 2011

Я думаю, что это плохая практика, потому что система разметки играет только с разделителями маркеров. Вы можете разбить строку после отмены пометки xml.

Почему бы не использовать этот формат XML:

<root><elements><element>value</element><element>something</element></elements></root>
...