如何检查xml节点是否包含带有XmlStreamreader的文本?

时间:2016-08-22 17:15:44

标签: java xml-parsing

假设我的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()检查节点是否有文本内容的方法?

1 个答案:

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