![](/img/trans.png)
[英]Java XMLStreamReader, how to get element text when text contains START_ELEMENT
[英]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.