在Java中的xmlElement上添加xmlAttribute

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中的xmlElement上添加xmlAttribute相关的知识,希望对你有一定的参考价值。

我正在尝试为Solr创建一个xml文件,但我遇到了一个问题。我使用@XmlElement注释告诉marhaller哪个是我的类的xml元素,如下所示:

@XmlElement(name = "field")
public String getAuthors() {
    return authors;
}

public void setAuthors(List<String> authors) {
    setValue(authors, "authors");
}

@XmlElement(name = "field")
public String getDate() {
    return date;
}

public void setDate(List<String> date) {
    setValue(date, "date");
}

@XmlElement(name = "field", required = false)
public String getContent() {
    return content;
}

public void setContent(List<String> content) {
    setValue(content, "content");
}

等等。

然后我使用以下命令创建xml文件:

XMLCreator collection = new XMLCreator(docs);

File fileOut = new File("docs.xml");
BufferedWriter writer = new BufferedWriter(new FileWriter(fileOut));
JAXBContext jaxbContext = JAXBContext.newInstance(XMLCreator.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(collection, writer);

它工作,但我希望我的xml文件具有以下格式:

<add>
    <doc>
        <field name="authors">Patrick Eagar</field>
        <field name="subject">Sports</field>
        <field name="dd">796.35</field>
        <field name="numpages">128</field>
        <field name="desc"></field>
        <field name="price">12.40</field>
        <field name="title">Summer of the all-rounder: Test and championship cricket in England 1982</field>
        <field name="isbn">0002166313</field>
        <field name="yearpub">1982</field>
        <field name="publisher">Collins</field>
    </doc>
    <doc>
        ...
    </doc>
</add>

我的目前如下:

<add>
    <doc id="2">
        <field></field>
        <field>Sugai, I.</field>
        <field></field>
        <field>CACM December, 1958 </field>
        <field>CA581202 JB March 22, 1978  8:29 PM </field>
        <field></field>
        <field>2    5   2
               2    5   2
               2    5   2
        </field>
        <field>Extraction of Roots by Repeated Subtractions for Digital 
               Computers </field>
    </doc>
</add>

我想要做的是在每个字段元素中添加name属性。这可以通过使用@Xml ...注释吗?

答案

如果你想使用attr和value,你需要复杂的元素和@XmlValue注释:

@XmlElement(name = "doc")
@XmlAccessorType(XmlAccessType.FIELD)
private List<Node> list;

@XmlElement(name = "field")
@XmlAccessorType(XmlAccessType.FIELD)
private Node node;

@XmlAccessorType(XmlAccessType.FIELD)
class Node {
@XmlAttribute(name= "name")
private String attr;

@XmlValue
private Srting value;
}

以上是关于在Java中的xmlElement上添加xmlAttribute的主要内容,如果未能解决你的问题,请参考以下文章

在 java 类中从 @XMLElement 获取注释值

将 XmlNode 添加到 XmlElement

在我的课堂上,我应该在哪里放置@XmlElement 注解?

通过 AppleScript 添加 InDesign XMLElements 时如何提高性能?

在Java中,@XmlType 、@XmlRootElement、@XmlElement 这类写法是啥语法?

如何在 XmlDocument 中的所有 XmlElements 中强制使用前缀? [复制]