Java 将XML解组为Iterable<;长期>;使用JAXB
我有一些非常简单的XML,希望对其进行解压。我只对其中一个重复的元素的值感兴趣。下面是一些示例XML: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> 我不想一次将所有标识符加载到内存中
<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();
}
}