-1

生成された xml ファイルを読み取る必要がありますが、ファイルがきれいな形式であることを要求することはできません。ファイルが 1 つの長い文字列であるか、改行が含まれているかは問題ではありません。

        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());

                    }
                }


        }

file: jaxb と Xmlstreamreader が非整列化すると、Hest 要素が 2 つ存在する場合でも、1 つの 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