Java JAXB混合内容列表包含换行符
我希望您能够帮助我解决我面临的有关JAXB的问题 我有以下XML文件:Java JAXB混合内容列表包含换行符,java,xml,jaxb,Java,Xml,Jaxb,我希望您能够帮助我解决我面临的有关JAXB的问题 我有以下XML文件: <root> <prop> <field1> <value1>v1</value1> <value2>v2</value2> </field1> <field2> <value1>
<root>
<prop>
<field1>
<value1>v1</value1>
<value2>v2</value2>
</field1>
<field2>
<value1>v1</value1>
<value2>v2</value2>
</field2>
</prop>
<prop>
text
<field1>
<value1>v1</value1>
<value2>v2</value2>
</field1>
</prop>
<prop>
text
</prop>
</root>
v1
v2
v1
v2
文本
v1
v2
文本
XML可以包含其他元素(字段1、字段2)、文本或两者
以及下列类别:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "root")
public class Root {
protected List<Root.Element> prop;
@XmlAccessorType(XmlAccessType.FIELD)
public static class Element {
@XmlMixed
protected List<String> content;
@XmlElement
public Field1 field1;
@XmlElement
public Field2 field2;
@XmlAccessorType(XmlAccessType.FIELD)
public static class Field1 {
@XmlElement
protected String value1;
@XmlElement
protected String value2;
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Field2 {
@XmlElement
protected String value1;
@XmlElement
protected String value2;
}
}
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“root”)
公共类根{
受保护名单;
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类元素{
@混合
受保护的列表内容;
@XmlElement
公共领域1领域1;
@XmlElement
公共领域2领域2;
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类字段1{
@XmlElement
受保护的字符串值1;
@XmlElement
受保护的字符串值2;
}
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类字段2{
@XmlElement
受保护的字符串值1;
@XmlElement
受保护的字符串值2;
}
}
}
我想将XML解组到上述类中。
我遇到的问题是,在内容列表中,除了文本之外,还有其他字符,如换行符和制表符。更具体地说,基于上述XML,当我尝试解组时,我得到:
- 第一个包含[“\n\t\t”、“\n\t\t”、“\n\t”]等内容的道具-它应该 这是一张空名单
- 第二个道具,内容类似[“\n\t\ttext\n\t\t”, “\n\t”]-它应该是一个包含一个字符串的列表
- 有内容的第三道具 类似于[“\n\t\ttext\n\t”]-它应该是一个空列表
XMLStreamReader
,这样任何只包含空格的字符串都不会报告为事件。下面是一个如何实现它的示例
import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource("src/forum22284324/input.xml"));
xsr = xif.createFilteredReader(xsr, new StreamFilter() {
@Override
public boolean accept(XMLStreamReader reader) {
if(reader.getEventType() == XMLStreamReader.CHARACTERS) {
return reader.getText().trim().length() > 0;
}
return true;
}
});
Unmarshaller unmarshaller = jc.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(xsr);
}
}