簡體   English   中英

如何使用XmlStreamreader檢查xml節點是否包含文本?

[英]How to check if an xml node contains text with XmlStreamreader?

假設我的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的流派而流逝,而book標簽則是reader.next()將其reader.next()下一個事件。 是否可以在不使用reader.next()情況下檢查節點是否具有文本內容?

您可以使用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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM