Как получить значение между тегами в формате XML, используя jaxb - PullRequest
0 голосов
/ 22 мая 2018

У меня есть формат xml, как показано ниже:

<list>12
    <item name="a">
        <child parent="b" age="1">David Beckham</child>
    </item>
</list>

Вопрос в том, как я могу извлечь 12, используя JAXB?Какая аннотация это поддерживает?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

SimpleXml может сделать это:

 final String data = ...
 final SimpleXml simple = new SimpleXml();
 final Element element = simple.fromXml(data);
 System.out.println(element.text);

Будет выводить:

12

Из центрального центра Maven:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.4.0</version>
</dependency>
0 голосов
/ 22 мая 2018

Ниже приведен рабочий пример.

import java.io.StringReader;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlElementRefs;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.transform.stream.StreamSource;

public class TestJAXBMixed {

    public static void main(String[] args) throws Exception {
        final String str = 
            "<list>12<item name=\"a\"><child parent=\"b\" age=\"1\">David Beckham</child></item></list>";
        final JAXBContext jaxbContext = JAXBContext.newInstance(Child.class, Item.class, ListElement.class);
        final JAXBElement<ListElement> obj = jaxbContext.createUnmarshaller().unmarshal(new StreamSource(new StringReader(str)), ListElement.class);
        // The following is an array of objects representing the <list> content in order, 
        // i.e. it is a sequence of a String (12) and an Object (Item)
        final List<Object> content = obj.getValue().getContent();
        System.out.println(content);
    }

}

@XmlRootElement(name="child")
class Child {

    private String parent;
    private String age;
    private String text;

    public String getParent() {
        return parent;
    }

    @XmlAttribute(name="parent")
    public void setParent(String parent) {
        this.parent = parent;
    }

    public String getAge() {
        return age;
    }

    @XmlAttribute(name="age")
    public void setAge(String age) {
        this.age = age;
    }

    public String getText() {
        return text;
    }

    @XmlValue
    public void setText(String text) {
        this.text = text;
    }
}

@XmlRootElement(name="item")
class Item {

    private String name;
    private Child child;

    public String getName() {
        return name;
    }

    @XmlAttribute(name="name")
    public void setName(String name) {
        this.name = name;
    }

    public Child getChild() {
        return child;
    }

    public void setChild(Child child) {
        this.child = child;
    }
}

@XmlRootElement(name="list")
class ListElement {

    private List<Object> content;

    public List<Object> getContent() {
        return content;
    }

    @XmlMixed
    @XmlElementRefs({
        @XmlElementRef(name="item", type=Item.class)
    })
    public void setContent(List<Object> content) {
        this.content = content;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...