如何在Java中使用JAXB将XML字符串解组到列表

时间:2018-11-30 12:34:42

标签: java xml-parsing jaxb

我正在使用JAXB将XML编组为Java对象。我不知道如何将XML元素中的字符串解组到List中。这是我尝试过的:

    private List<String> words;

    public List<String> getWords() {
        return words;
    }

    @XmlElement(name="Words")
    public void setWords(String words) {
        /* Converting String to List */
        this.words = Arrays.asList(words.split(", "));
    }

我的XML:

<Words>A, B, C, D</Words>

代码不是List,而是空值。如果我将单词的类型从“列表”更改为“字符串”,则工作正常。是否可以从字符串转换为列表或数组?

XML解析代码:

File file = new File("path\\to\\xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Myclass.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Myclass xmlContent = (Myclass) jaxbUnmarshaller.unmarshal(file);
System.out.println(xmlContent.getWords());

PS:链接的另一个问题与此不同,在这里我试图从XML元素(单个元素)中获取String并将其拆分并存储在列表中。另一方面,问题是拆分XML字符串并将某些元素存储在列表中。

1 个答案:

答案 0 :(得分:0)

最后,我找出了问题所在,找到了获取字符串数组而不是字符串列表的解决方案。

private String[] words;

@XmlElement(name="Words")
public void setWords(String[] words) {
    /* Converting String to Array */
    this.words = words[0].split(", ");
}

问题在于方法参数类型(String)和变量类型(List<String>)不相同。为了正确解析它应该是相同的。我已经将它们都更改为String[],并将我的逻辑设置为setter。现在,将XML中的字符串解析为String[]