2012-10-13 70 views
1

我需要使用xmlreader解析以下xml文件,然後使用JAXB解組這些部分。無法使用XMLReader訪問特定的XML元素

<parents> 
    <moms> 
     <mom> 
     ... 
     </mom> 
     <mom> 
     ... 
     </mom> 
    ... 
    </moms> 
    <dads> 
     <dad> 
     .. 
     </dad> 
     .. 
     .. 
    </dads> 
</parents> 

我能達到<moms>元素,但我無法達到<dads>元素,無論是使用相同的XmlReader變量或一個完全新的一個。我只能夠找到媽媽元素,然後輸入有層次...

代碼:

  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(); 
     } 
    }     
    } 
+1

你可以包含你的代碼的例子嗎? –

+0

什麼是您的處理程序/解析程序代碼? –

+0

@KirillLebedev - 什麼是處理程序/解析程序? – akapulko2020

回答

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

我想你設法跳過了父親元素。嘗試簡化你的邏輯。所有這一切要求nextTag業務似乎對我錯了。另外,雖然我不確定,但條件聲明在似乎很愚蠢。如果你完成了,使用xmlStreamReader.hasNext,跳出循環。