【问题标题】:StAX incorrectly reading the event readerStAX 错误地读取事件阅读器
【发布时间】:2012-03-16 19:07:03
【问题描述】:

我有一个 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 解析器只能在遇到

这是我正在使用的代码:

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

【问题讨论】:

    标签: java xml-parsing stax


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多