2016-05-20 14 views
1

私は、次の質問を持っている:解析特殊文字

オリジナルRSSファイルの一部:私はStAXのパーサの特殊文字「& LT」を使用してファイルを読み込む

<item> 
     <title> I can get data in tag this </title> 
     <description>&lt;p&gt; i don't get data in this &lt;/p&gt;</description></item> 

。 。自動的に '<'に変換されます。

public Feed readFeed() { 
Feed feed = null; 
try { 
    boolean isFeedHeader = true; 
    String description = ""; 
    String title = ""; 

    XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
    InputStream in = read(); 
    XMLEventReader eventReader = inputFactory.createXMLEventReader(in); 
    while (eventReader.hasNext()) { 
    XMLEvent event = eventReader.nextEvent(); 
    if (event.isStartElement()) { 
     String localPart = event.asStartElement().getName() 
      .getLocalPart(); 
     switch (localPart) { 
     case "title": 
     title = getCharacterData(event, eventReader); 
     break; 
     case "description": 
     description = getCharacterData(event, eventReader); 
     break; 
     } 
    } else if (event.isEndElement()) { 
     if (event.asEndElement().getName().getLocalPart() == ("item")) { 
     FeedMessage message = new FeedMessage(); 
     message.setDescription(description); 
     message.setTitle(title); 
     feed.getMessages().add(message); 
     event = eventReader.nextEvent(); 
     continue; 
     } 
    } 
    } 
} catch (XMLStreamException e) { 
    throw new RuntimeException(e); 
} 
return feed;} 

private String getCharacterData(XMLEvent event, XMLEventReader eventReader) 
    throws XMLStreamException { 
String result = ""; 
event = eventReader.nextEvent(); 
if (event instanceof Characters) { 
    result = event.asCharacters().getData(); 
} 
return result;} 

私が指示に従ってています:私は

これは私のコードである 『>説明』タグ "<の残りの部分でデータを取得することはできません。http://www.vogella.com/tutorials/RSSFeed/article.html

+0

staxパーサー(関連コード)を使用してこのファイルをどのように読んでいますか?そして、新しいXMLファイルはどのように見えますか(例pls)? – zapl

+0

新しいファイルに書き込むコードに欠陥があります。もしあなたがそれを見せたら、私たちはどのように識別するのかを助けることができます。 – Andreas

+0

2番目の ''は ''のような終了タグではありませんか? – dorukayhan

答えて

4

チュートリアルは欠陥があることは、あなたがエンティティを埋め込んだときに発生する傾向があるテキストの1つのブロックに対して、複数のテキストイベントを得ることができるという事実を説明していません。

mak XMLEventReaderを作成する前にXMLInputFactoryのIS_COALESCINGプロパティをtrueに設定してください(このプロパティを使用すると、隣接するすべてのテキストイベントを1つのイベントにまとめる必要があります)。

+0

Ok @jtahlborn。わかった。ありがとうございます! :) – joseJv

+0

@joseJv - これが正解であれば、そのようにマークする必要があります。それはあなたのために働いてうれしい! – jtahlborn