-1

我需要读取生成的 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;
        }


    }

}

4

1 回答 1

0

XMLStreamReader记下解组操作完成时所在的事件(节点) 。它可能比您认为的要领先。这意味着您的next()电话将意味着跳过鼻子。

于 2015-03-15T12:12:11.843 回答