1

サンプルXML:

<rss version="2.0">
<channel>
<title>The Channel Title Goes Here</title>
<description>
The explanation of how the items are related goes here
</description>
<link>/events</link>
<item>
<title>
<![CDATA[ some title ]]>
</title>
<description>
<![CDATA[ ]]>
</description>
<content:encoded xmlns:content="http://stuff.com">
<![CDATA[ 
    <event>
        <name>some name</name>
        <startdate>some date</startdate>
        <starttime>some time</starttime>
        <location>some place</location>
        <description></description>
    </event>
]]>
</content:encoded>
</item>
<item>
</item>
...
</channel>
</rss>

私のSAXパーサーstartElementメソッドは次のifステートメントには入りませんが、sysoutは「イベント」をlogcatに出力します。なぜそれが決して見つからlocalName.equals("event")ないのtrueですか?

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException 
{
    System.out.println(localName);

    if (localName.equals("event"))      // <-- never goes in here
    {
        // do stuff
    }
}

これはCDATAと関係があり、パーサーの設定方法と関係がありますか?これが私がすべてをインスタンス化する方法です:

URL sourceUrl = new URL(kEventsURL);

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();

MyXMLHandler myXMLHandler = new MyXMLHandler();
xr.setContentHandler(myXMLHandler);
xr.parse(new InputSource(sourceUrl.openStream()));
4

2 に答える 2

1

ここで最初の回答を読んで、タグの開始を認識しない理由を理解してください。おそらく、要素からのテキストを使用して別のパーサーを実行する必要があります。

于 2012-06-07T20:41:22.210 に答える
0

「localName」の代わりに「qName」を試してください

于 2013-06-17T18:14:48.177 に答える