1

それで、私はインターネット(RSS)から取得するXMLファイルの解析に取り組んできました。

私はここにあるIBMのパーサーに従って作業してきました。

残念ながら、次のようなリンクを解析しようとすると、次のようになります。

http://www.website.net/index.php?option=com_adsmanager&page=display&catid=87&tid=208196

しかし、私のパーサーはリンクをhttp://www.website.net/index.php?option=としてのみ表示し、残りのリンクは切断されています。

これを修正する方法について何か考えはありますか?

編集1:

SaxParserはまったく機能しません。それは(誤って)文書がうまく形成されていないと主張していますが、それがチェックされ、二重にチェックされたので、私はそれが真実ではないことを知っています。

編集2:

NodeListは複数の子があり、すべてのアンパサンド(&)が新しいノードを作成しました。

そのため、私が持っていたコード:

if (name.equalsIgnoreCase(LINK)) {
    val = property.getFirstChild().getNodeValue();
    message.setLink(val);
}

良くありませんでした。それで、私はそれをこのコードに修正しました:

if (name.equalsIgnoreCase(LINK)) {
    val = "";
    NodeList list = property.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        val += list.get(i).getNodeValue().toString();
    }
    message.setLink(val);
}

これは、DOMXMLフィードパーサーでこれを行う方法でした。今私がしなければならないのは、IBMの例とは異なるパーサー内でこれを行う方法を見つけることだけです。

4

2 に答える 2

1
<link>http://www.website.net/index.php?option=com_adsmanager&page=display&catid‌​=87&tid=208196</link> 

... &sの後に有効なxmlエンティティが続かないため、有効なXMLではありません。

これを回避するには、いくつかの方法があります。

&sをエスケープします:

<link>http://www.website.net/index.php?option=com_adsmanager&amp;page=display&amp;catid‌​=87&amp;tid=208196</link> 

linkセクションをCDATAでラップします

<link><![CDATA[http://www.website.net/index.php?option=com_adsmanager&page=display&catid‌​=87&tid=208196]]></link> 

RSSファイルの作成を制御できない場合は、ドキュメントをXMLパーサーにフィードする前に前処理する必要があります。TagSoupのような寛容なxmlパーサーを移動 すると役立つ場合があります。

于 2012-04-29T13:45:37.950 に答える
0

上手。私はこれをある程度解決しました。

私の2回目の更新は、問題の正しい見方でした。にNodeListは複数の子があり、すべてのアンパサンド(&)が新しいノードを作成しました。

そのため、私が持っていたコード:

if (name.equalsIgnoreCase(LINK)) {
    val = property.getFirstChild().getNodeValue();
    message.setLink(val);
}

良くありませんでした。それで、私はそれをこのコードに修正しました:

if (name.equalsIgnoreCase(LINK)) {
    val = "";
    NodeList list = property.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        val += list.get(i).getNodeValue().toString();
    }
    message.setLink(val);
}

これは、DOMXMLフィードパーサーでこれを行う方法でした

于 2012-04-29T15:05:39.033 に答える