我有一个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">
<RPTSVC role:instanceID="765002" role:roleName="ReportingServices" role:Identity="175">
<SSRSServerDetails>
<SSRS_PORT>29283</SSRS_PORT>
<SSRS_SSL_PORT>29284</SSRS_SSL_PORT>
</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());
}
}
}
}
答案 0 :(得分:1)
给定父级下可以有多个文本节点。您可能会发现,如果您循环并继续检查isCharacters()
,您最终将获得所有文本。