我需要读取生成的 xml 文件,并且我不能要求它们采用漂亮的格式,无论文件是一个长字符串还是带有换行符的漂亮文件都无关紧要。
final JAXBContext context = JAXBContext.newInstance(typeClass);
final XMLInputFactory xmlif = XMLInputFactory.newInstance();
final Unmarshaller unmarshaller = context.createUnmarshaller();
final XMLStreamReader xmlr = xmlif.createXMLStreamReader(reader);
xmlr.nextTag();
List<T> items = new ArrayList<T>();
long count = 0;
while (xmlr.hasNext()) {
System.out.println(":"+XmlStreamUtils.printEvent(xmlr));
int eventType = xmlr.next();
if (eventType == XMLStreamReader.START_ELEMENT) {
if (target.getSimpleName().equals(xmlr.getLocalName()) || target.getSimpleName().startsWith(xmlr.getLocalName())) {
items.add(unmarshaller.unmarshal(xmlr, target).getValue());
}
}
}
文件:当 jaxb 和 Xmlstreamreader 解组时,即使存在两个 Hest 元素,它也只会解组一个 Hest 元素。这只发生在打印不漂亮的时候。为什么??
<?xml version='1.0' encoding='UTF-8'?>
<Fil>
<Hest>
<hestName>hest</hestName>
<hestAge>12</hestAge>
<hestColor>blue</hestColor>
</Hest>
<Hest>
<hestName>hest</hestName>
<hestAge>12</hestAge>
<hestColor>blue</hestColor>
</Hest>
</Fil>
我的 jaxb 课程
/**
*
*/
package dk.skat.efi.wls.bebb.bum;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author efidev
*
*/
public class JaxbTest {
@XmlRootElement(name = "Hest")
@XmlAccessorType(XmlAccessType.FIELD)
public static class Hest {
@XmlElement(name = "hestName")
private String hestName;
@XmlElement(name = "hestAge")
private String hestAge;
@XmlElement(name = "hestColor")
private String hestColor;
public String getHestName() {
return hestName;
}
public void setHestName(String hestName) {
this.hestName = hestName;
}
public String getHestAge() {
return hestAge;
}
public void setHestAge(String hestAge) {
this.hestAge = hestAge;
}
public String getHestColor() {
return hestColor;
}
public void setHestColor(String hestColor) {
this.hestColor = hestColor;
}
}
}