StAX неправильно читает программу чтения событий - PullRequest
0 голосов
/ 16 марта 2012

У меня есть xml как

<?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 может удалить «<» только при обнаружении <, а затем сообщить об этом как о готовом. </p>

Вот код, который я использую:

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

Что я делаю неправильно?Спасибо за вашу помощь.


Вот новый код (еще может быть без ошибок)

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 Ответ

1 голос
/ 16 марта 2012

Может быть несколько текстовых узлов под данным родителем.Вы, вероятно, обнаружите, что если вы зацикливаетесь и продолжаете проверять isCharacters(), вы в конечном итоге получите весь текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...