示例XML:Java的SAX解析器起始元素沒有看到標籤
<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
語句,但該系統輸出打印「事件」的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()));
這真的不是一個驚喜,是嗎? CDATA部分通常包含不符合XML格式或結構的文本,因此將被解析器忽略(意思是:它被認爲是純文本)。我沒有意識到改變這種標準化行爲的設置,但是因爲在你的情況下,CDATA部分基本上是另一個XML層次結構,我不明白你爲什麼不能將它委託給另一個SAX解析器實例。 –