2012-03-16 52 views
0

我有一个XML作为StAX的读取错误事件阅读

<?xml version="1.0" encoding="UTF-8"?> 
<Batch checksum="4f4e96dc724aa38965a75121b654a49830fc6a46f927f1b1803cdd22a40f1e27"> 
<UpdateCache incremental="false" cleanCache="true"> 
    <PayLoad> 
     <ConfigurationChangeSet /> 
     <CacheContent Type="ReportingServices" Name="ReportingServices-conf.xml" Path="roles/ReportingServices" EntryName="ReportingServices" EntryId="175"> 
      &lt;RPTSVC role:instanceID="765002" role:roleName="ReportingServices" role:Identity="175"&gt; 
      &lt;SSRSServerDetails&gt; 
      &lt;SSRS_PORT&gt;29283&lt;/SSRS_PORT&gt; 
      &lt;SSRS_SSL_PORT&gt;29284&lt;/SSRS_SSL_PORT&gt; 
     </CacheContent> 
    </PayLoad> 
</UpdateCache> 

我对使用STAX到标签的内容剥离成一个单独的文件一个项目。问题在于,stax解析器只能在遇到<时剥离'<',然后将其报告为完成。

这里是代码我使用:

while(reader.hasNext()){ 
     XMLEvent event = reader.nextEvent(); 
     if(event.isStartElement()){ 
      StartElement startElement = event.asStartElement(); 

      if(startElement.getName().getLocalPart().equals("CacheContent")){ 
       XMLEvent cacheContentXmlEvent = reader.peek(); 
       if(cacheContentXmlEvent.isCharacters()){ 
        Characters cacheContentXmlText = cacheContentXmlEvent.asCharacters(); 

        System.out.println(String.format("Cache Content ==> %s " , cacheContentXmlText.getData())) ; 
       } 
      } 
     } 
    } 

我在做什么错?谢谢你的帮助。


下面是新的代码(可能不无bug还)

while(reader.hasNext()){ 
     XMLEvent event = reader.nextEvent(); 
     if(event.isStartElement()){ 
      StartElement startElement = event.asStartElement(); 
      if(startElement.getName().getLocalPart().equals("CacheContent")){ 

       XMLEvent cacheContentXmlEvent = reader.peek(); 
       if(cacheContentXmlEvent.isCharacters()){ 
        StringBuilder stringBuilder = new StringBuilder(); 
        while(reader.hasNext()){ 
         XMLEvent xmlCharEvent = reader.nextEvent(); 
         if(xmlCharEvent.isCharacters()){ 
          stringBuilder.append(xmlCharEvent.asCharacters().getData()); 
         } 
         if(reader.peek().isCharacters()){ 
          continue; 
         }else{ 
          break; 
         } 
        } 
        System.out.println(stringBuilder.toString()); 
       } 
      } 
     } 
    } 

回答

1

可以有定父下的多个文本节点。你可能会发现,如果你循环并继续检查isCharacters(),你会最终得到所有文本。