2

以下に示すように、解析するXMLがあります

<feed>
    <feed_id>12941450184d2315fa63d6358242</feed_id>
    <content> <fieldset><table cellpadding='0'  border='0'  cellspacing='0'  style="clear :both"><tr valign='top' ><td width='35' ><a href='http://mypage.rediff.com/android/32868898'  class='space' onmousedown="return enc(this,'http://track.rediff.com/click?url=___http%3A%2F%2Fmypage.rediff.com%2Fandroid%2F32868898___&service=mypage_feeds&clientip=202.137.232.113&pos=0&feed_id=12941450184d2315fa63d6358242&prc_id=32868898&rowid=674061088')" ><div style='width:25px;height:25px;overflow:hidden;'><img src='http://socialimg04.rediff.com/image.php?uid=32868898&type=thumb'  width='25'  vspace='0'  /></div></a></td> <td><span><a href='http://mypage.rediff.com/android/32868898'  class="space" onmousedown="return enc(this,'http://track.rediff.com/click?url=___http%3A%2F%2Fmypage.rediff.com%2Fandroid%2F32868898___&service=mypage_feeds&clientip=202.137.232.113&pos=0&feed_id=12941450184d2315fa63d6358242&prc_id=32868898&rowid=674061088')" >Android </a> </span><span style='color:#000000 !important;'>testing</span><div class='divtext'></div></td></tr><tr><td height='5' ></td></tr></table></fieldset><br/></content>
    <action>status updated</action>
</feed>

タグには、必要なデータを含む HTML コンテンツが含まれています。私は SAX パーサーを使用しています。これが私がやっていることです

private Timeline timeLine; //Object
private String tempStr;

public void characters(char[] ch, int start, int length)
        throws SAXException {
    tempStr = new String(ch, start, length);
}

public void endElement(String uri, String localName, String qName)
        throws SAXException {
    if (localName.equalsIgnoreCase("content")) {
        if (timeLine != null) {
            timeLine.setContent(tempStr);
        }
}

このロジックは機能しますか? いいえの場合、SAX パーサーを使用して XML から埋め込まれた HTML データを抽出する方法を教えてください。

4

4 に答える 4

1

すべてのhtmlがxmlになった後、htmlを解析できます。stackoverflowにこれに類似したリンクがあります。これを試すことができます。SAXPARSERを使用してandroidでhtmlコンテンツを解析する方法

于 2011-01-05T10:07:14.600 に答える
1

開始要素で、要素がコンテンツの場合、一時Strバッファーを初期化する必要があります。それ以外の場合、コンテンツがすでに開始されている場合は、現在の開始要素とその属性をキャプチャし、それを一時Strバッファーに更新します。

文字で、コンテンツが開始されている場合は、文字を現在の文字列バッファに追加します。

コンテンツが開始されている場合の終了要素で、終了ノードをキャプチャし、文字列バッファに追加します。

私の仮定:

xmlにはコンテンツタグが1つだけあります。

于 2011-01-05T13:37:20.747 に答える
0

私はこのように解決策を見つけます:

注:<chapter>このソリューションでは、タグ 間のhtmlコンテンツを取得したいと思います(<chapter> ... html content ... </chapter>)

DefaultHandler handler = new DefaultHandler() {

    boolean chap = false;

    public char[] temp;
    int chapterStart;
    int chapterEnd;

    public void startElement(String uri, String localName,
            String qName, Attributes attributes)
            throws SAXException {

            System.out.println("Start Element :" + qName);

            if (qName.equalsIgnoreCase("chapter")) {
                chap = true;
            }

        }

        public void endElement(String uri, String localName,
            String qName) throws SAXException {

            if (qName.equalsIgnoreCase("chapter")) {
                System.out.println(new String(temp, chapterStart, chapterEnd-chapterStart));

            }
            System.out.println("End Element :" + qName);

        }

        public void characters(char ch[], int start, int length)
                throws SAXException {

            if (chap) {
                temp = ch;
                chapterStart = start;
                chap = false;
            }
            chapterEnd = start + length;

        }

    };

アップデート:

私のコードにはバグがあります。DocumentHandlerのch[]の長さは、状況によって異なるためです。

于 2011-10-01T21:38:31.320 に答える
0

<content>html が実際に xhtml である場合、SAX を使用してそれを解析し、タグ の xhtml コンテンツを抽出できますが、これほど簡単ではありません。

タグ内のすべての xhtml タグによって発生するイベントにハンドラーが実際に応答する <content>ようにし、DOM 構造に似たものを構築して、それを xml 形式にシリアル化するか、オンザ- fly は、コンテンツを複製する xml 文字列バッファーに直接書き込みます。

How to parse the html content in android using SAX PARSERで提案されているように、 content タグ内の html が CDATA 要素にラップされるように xml を変更すると、コードからそれほど遠くないものが実際に機能するはずです。

しかし、あなたがやっているように、内容をメソッドのString tempStr変数に入れることはできません。タグを見て文字列のバッファを初期化し、メソッドでそのバッファに収集し、結果をタグのどこかに置くメソッドがcharacters必要です。startElement<content>charactersendElement<content>

于 2011-01-05T12:36:50.683 に答える