2

BBC ニュースの RSS フィードを例にとると、そのニュース項目の 1 つが次のとおりです。

<item><title>Pupils 'bullied on sports field'</title><description>bla bla..

これを解析するJavaコードがいくつかありますが、タイトルにアポストロフィが含まれている場合(上記のように)、解析が停止するため、次のタイトルになります: . 完全なタイトルを解析するにはどうすればよいですか? 以下は、情報を解析する for ループ内のコードの一部です。

                    NodeList title = element.getElementsByTagName("title");
                    Element line = (Element) title.item(0);
                    tmp.setTitle(getCharacterDataFromElement(line).toString());

まったく同じコードを使用して、description や pubDate などの他の要素を解析しますが、これらはすべて問題ありません。

これは getCharacterDataFromElement メソッドです。

public static String getCharacterDataFromElement(Element e) {
    Node child = ((Node) e).getFirstChild();
    if (child instanceof CharacterData) {
        CharacterData cd = (CharacterData) child;
        return cd.getData();
    }
    return "";
}

私は何を間違っていますか?DocumentBuilder、DocumentBuilderFactory、および org.w3c.dom を使用して、RSS フィードを操作します。

4

3 に答える 3

2

getCharacterDataFromElement は最初の子のみを調べます - さらに子要素があるかどうかを確認し、すべてのテキストを一緒にタックします

HTH - DF

于 2012-04-16T22:26:50.413 に答える
0

davidfrancis が示唆したように、 内のすべての子に対して反復処理を行う必要がありますgetCharacterDataFromElement()

または、DOM レベル 3 を使用できる場合は、代わりにNode.getTextContent()メソッドを使用できます。

NodeList title = element.getElementsByTagName("title");
Element line = (Element)title.item(0);
tmp.setTitle(line.getTextContent());
于 2012-04-16T23:44:48.770 に答える
-1

私の知る限り、アポストロフィは XML の予約文字であるため、 としてエンコードする必要があります&apos;

これは、BBC ニュースの RSS フィードが整形式の XML を提供していないことを意味します。

最善の方法は、バグ レポートを BBC ニュース RSS フィード プロバイダーに発行して、修正してもらうことです。

于 2012-04-16T22:34:39.617 に答える