2015-04-06 69 views
0

我有一个xml文件,我试图使用stax xml解析器拍摄< _3-auto>节点中的文本。文本在任何节点内都不正确,所以stax无法取值。是否有其他方法可以使用stax来取值。从xml中获取元素文本,该文本在节点内部不正确

<_3-auto> 
    <prefix> 
     <autonum>(3)</autonum> 
    </prefix> 
    Remove the rear fuselage support from FS755.00 of the aircraft. 
</_3-auto> 
<_3-auto> 
    <prefix> 
     <autonum>(4)</autonum> 
    </prefix> 
    Put the hydraulic scissor lift (1) under the nose ballast assembly&#8201;(2). 
</_3-auto> 

这是我编写的代码,以采取_3自动节点内的文本。

try { 
     XMLInputFactory inputFactory; 
     inputFactory = XMLInputFactory.newInstance(); 
     InputStream inputStream = new FileInputStream(filePath); 

     XMLStreamReader streamReader = inputFactory.createXMLStreamReader(inputStream); 

     while (streamReader.hasNext()) { 
      int event = streamReader.next(); 

      if (event == XMLStreamConstants.START_ELEMENT) { 
        if (streamReader.getLocalName().equals("_3-auto")) { 
         String auto = streamReader.getElementText(); 
         System.out.println(auto); 
        } 
      } 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

回答

0

的文件说,这是文本的唯一元素,则不应使用getElementText()

您需要在此处执行的操作是在出现<_3-auto>节点时监视XMLStreamConstants.CHARACTERS事件。一个简单的方法是在你的解析中处理一个上下文,以知道你是否在这样的节点中。在这种情况下,我做了简单的假设,即你在<_3-auto> startElement事件后,该节点</prefix>结束元素事件:

 boolean current3AutoNode = false; 

     while (streamReader.hasNext()) { 
      int event = streamReader.next(); 

      if (event == XMLStreamConstants.START_ELEMENT) { 
        if (streamReader.getLocalName().equals("_3-auto")) { 
         current3AutoNode = true; 
        } 
        else { 
         current3AutoNode = false; 
        } 
      } 
      else if (event == XMLStreamConstants.END_ELEMENT) { 
       if (streamReader.getLocalName().equals("prefix")) { 
        current3AutoNode = true; // after end of </prefix> we are back in <_3-auto> node 
       } 
       else { 
        current3AutoNode = false; 
       } 
      } 
      if (event == XMLStreamConstants.CHARACTERS && current3AutoNode) { 
       // these are the characters inside <_3-auto> </_3-auto> 
       String characters = streamReader.getText(); 
       System.out.println(characters); 
      } 
     } 

这将打印的“删除FS755机身后部支架.00的飞机。“和“将液压剪式升降机(1)放在鼻梁镇流器组件 (2)下”。文本,还有一些可以过滤掉的空白字符。