我需要使用xmlreader解析以下xml文件,然后使用JAXB解组部件。
<parents>
<moms>
<mom>
...
</mom>
<mom>
...
</mom>
...
</moms>
<dads>
<dad>
..
</dad>
..
..
</dads>
</parents>
我可以访问<moms>
元素,但我无法使用相同的Xmlreader变量或全新的<dads>
元素。我只能找到妈妈元素,然后进入那里的层次结构......
代码:
fileInputStream = new FileInputStream( file );
xmlStreamReader = Utils.getXMLStreamReader( fileInputStream, "UTF-8" );
JAXBContext context = JAXBContext.newInstance(Moms.class, Dads.class);
unmarshaller = context.createUnmarshaller();
xmlStreamReader.nextTag();
xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, "parents" );
xmlStreamReader.nextTag();
xmlStreamReader.nextTag();
xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, part );
xmlStreamReader.require( XMLStreamConstants.START_ELEMENT, null, "parents" );
while ( xmlStreamReader.getEventType() == XMLStreamConstants.START_ELEMENT )
{
String localName = xmlStreamReader.getLocalName();
if ( localName.equals("dads") )
{
xmlStreamReader.nextTag();
}
if (xmlStreamReader.getEventType() ==XMLStreamConstants.CHARACTERS)
{
xmlStreamReader.next();
}
}
}
答案 0 :(得分:3)
给出以下XML
<parents>
<moms>
<mom>A</mom>
<mom>B</mom>
</moms>
<dads>
<dad>C</dad>
</dads>
</parents>
以下代码
InputStream is = new FileInputStream("...");
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(is);
while (xsr.hasNext()) {
if (xsr.next() == XMLStreamConstants.START_ELEMENT
&& xsr.getLocalName().equals("dad")) {
if (xsr.next() == XMLStreamConstants.CHARACTERS)
System.out.println(xsr.getText());
}
}
打印 C 。
我认为你设法跳过了 dad 元素。尝试简化您的逻辑。所有需要和 nextTag 业务对我来说都是错误的。此外,虽然我不确定,但中的条件语句似乎很愚蠢。改为使用 xmlStreamReader.hasNext ,如果你已经完成,就跳出循环。