StAX错误地读取事件阅读器

时间:2012-03-16 19:07:04

标签: java xml-parsing stax

我有一个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解析器只能剥离'&lt;'当遇到&lt;然后报告完成。

以下是我正在使用的代码:

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 个答案:

答案 0 :(得分:1)

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