如何解析只有根元素的XML

5
我需要为反编组一个XML类进行注释,格式如下:

<element>data</element>

我不知道该怎么做,因为类必须使用@XmlRootElement进行注释,但我需要获取根元素的值。我知道这样做是行不通的,但这就是我所做的:

@XmlRootElement(name = "element")
public Class MyClass{

@XmlElement(name = "element")
protected String elementValue;
public String getElementValue(){...}
public void setElementValue(String el){...}

有没有可能得到这个?
1个回答

13

您正在寻找@XmlValue注释。

MyClass

package forum13626828;

import javax.xml.bind.annotation.*;

@XmlRootElement(name = "element")
public class MyClass{

    protected String elementValue;

    @XmlValue
    public String getElementValue() {
        return elementValue;
    }

    public void setElementValue(String el) {
        this.elementValue = el;
    }

}

演示

package forum13626828;

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

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

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StringReader xml = new StringReader("<element>data</element>");
        MyClass myClass = (MyClass) unmarshaller.unmarshal(xml);

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

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<element>data</element>

我将其更改为:@XmlRootElement(name = "element") public class MyClass { @XmlValue protected String elementValue; public String getElementValue() {...} public void setElementValue(String el) {...} }但仍然无法正常工作。 - hiamex
@hiamex 默认情况下,您需要在get方法上添加注释。我已经更新了答案以显示这一点。 - bdoughan
我认为它可以在 getter 或 field 中。无论如何,它仍然不起作用,有任何想法吗? - hiamex
1
@BlaiseDoughan - 现在这应该是你的答案,而不是我的。 :) 感谢你的更新。 - jtahlborn
1
好的,谢谢你们两个,答案是正确的,但我在使用JAXBContext.newInstance参数时遇到了一些附带问题。现在一切都完美地运作了,谢谢;-) - hiamex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接