我将尝试用一个例子来回答你的问题:
输入.xml
我们将在本示例中使用以下 XML 文档。这root
元素具有混合内容。具有混合内容意味着文本节点可以与元素混合出现。由于可能会出现多个文本节点,因此一元属性并不适合。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<root/>
Hello
<root/>
World
<root/>
</root>
Demo
以下代码将用于以对象形式读取 XML,然后将其写回 XML。
package forum10940267;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum10940267/input.xml");
Root root = (Root) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
用例 #1 - 一个列表来保存混合内容
@XmlMixed
最常与另一个注释一起使用,以便生成List
包含元素和文本内容。这样做的优点之一是可以维持顺序,以便可以往返文档。
package forum10940267;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private List<Object> mixedContent = new ArrayList<Object>();
@XmlElementRef(name="root", type=Root.class)
@XmlMixed
public List<Object> getMixedContent() {
return mixedContent;
}
public void setMixedContent(List<Object> mixedContent) {
this.mixedContent = mixedContent;
}
}
Output
输出与输入匹配。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<root/>
Hello
<root/>
World
<root/>
</root>
用例 #2 - 混合内容的单独列表
您还可以为文本内容引入单独的列表属性。
package forum10940267;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private List<Object> mixedContent = new ArrayList<Object>();
private List<String> text;
@XmlElementRef(name="root", type=Root.class)
public List<Object> getMixedContent() {
return mixedContent;
}
public void setMixedContent(List<Object> mixedContent) {
this.mixedContent = mixedContent;
}
@XmlMixed
public List<String> getText() {
return text;
}
public void setText(List<String> text) {
this.text = text;
}
}
Output
输出不再与输入匹配。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<root/>
<root/>
<root/>
Hello
World
</root>
用例 #3 - 文本内容的字符串属性
由于文本节点可以在混合内容中多次出现,因此非 List 属性不太适合,并且看起来好像@XmlMixed
注释被忽略。
package forum10940267;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private List<Object> mixedContent = new ArrayList<Object>();
private String text;
@XmlElementRef(name="root", type=Root.class)
public List<Object> getMixedContent() {
return mixedContent;
}
public void setMixedContent(List<Object> mixedContent) {
this.mixedContent = mixedContent;
}
@XmlMixed
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Output
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<root/>
<root/>
<root/>
</root>