假设我的XML看起来像这样
<books><genres><crime><book>ABC</book></crime></genres></books>
我不知道哪个标签预先有文本值。我想检查一个节点是否包含文本,然后存储它。
我正在使用这样的代码:
XMLInputFactory inputfacory = XMLInputFactory.newFactory();
XMLStreamReader reader = inputfacory
.createXMLStreamReader(new FileReader(
"path"));
while (reader.hasNext()) {
if (reader.next() == XMLStreamConstants.START_ELEMENT) {
System.out.println(reader.getLocalName());
if(reader.next()==XMLStreamConstants.CHARACTERS){
//store string
}
}
输出是:
books
crime
但问题是,在这种情况下,读者将通过传递类型和书籍标签reader.next()
将其带到下一个事件。有没有使用reader.next()
检查节点是否有文本内容的方法?
答案 0 :(得分:0)
你可以isCharacters()
方法如下:
try
{
String input = "<books><genres><crime><book>ABC</book></crime></genres></books>";
XMLInputFactory inputfacory = XMLInputFactory.newFactory();
XMLStreamReader reader = inputfacory
.createXMLStreamReader(new StringReader(input));
List<String> texts = new ArrayList<String>();
while ( reader.hasNext() )
{
reader.next();
if ( reader.isCharacters() )
{
texts.add( reader.getText() );
}
}
for ( String text : texts )
{
System.out.println( text );
}
}
catch ( Exception ex )
{
ex.printStackTrace();
}