Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将XML解组为Iterable<;长期>;使用JAXB_Java_Xml_Jaxb_Unmarshalling - Fatal编程技术网

Java 将XML解组为Iterable<;长期>;使用JAXB

Java 将XML解组为Iterable<;长期>;使用JAXB,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我有一些非常简单的XML,希望对其进行解压。我只对其中一个重复的元素的值感兴趣。下面是一些示例XML: <Document> <HeaderGuff>Whatever</HeaderGuff> <Foos> <FooId>1</FooId> <FooId>2</FooId> </Foos> </Document> 我不想一次将所有标识符加载到内存中

我有一些非常简单的XML,希望对其进行解压。我只对其中一个重复的元素的值感兴趣。下面是一些示例XML:

<Document>
  <HeaderGuff>Whatever</HeaderGuff>
  <Foos>
    <FooId>1</FooId>
    <FooId>2</FooId>
  </Foos>
</Document>

我不想一次将所有标识符加载到内存中,因为可能有很多标识符,并且每次只需要一个标识符进行单独处理。

因为您只对其中一个元素感兴趣,不想一次将所有数据加载到内存中,所以我会使用StAX解析器(自JavaSE6以来就包含在JDK/JRE中)而不是本用例中的JAXB

然后将
XMLStreamReader
前进到
FooId
元素,处理它,然后前进到下一个元素

import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        XMLInputFactory xif = XMLInputFactory.newFactory();
        StreamSource source = new StreamSource("input.xml");
        XMLStreamReader xsr = xif.createXMLStreamReader(source);

        while(xsr.hasNext()) {
            if(xsr.isStartElement() && "FooId".equals(xsr.getLocalName())) {
                long value = Long.valueOf(xsr.getElementText());
                System.out.println(value);
            }
            xsr.next();
        }

        xsr.close();
    }

}
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        XMLInputFactory xif = XMLInputFactory.newFactory();
        StreamSource source = new StreamSource("input.xml");
        XMLStreamReader xsr = xif.createXMLStreamReader(source);

        while(xsr.hasNext()) {
            if(xsr.isStartElement() && "FooId".equals(xsr.getLocalName())) {
                long value = Long.valueOf(xsr.getElementText());
                System.out.println(value);
            }
            xsr.next();
        }

        xsr.close();
    }

}