【发布时间】:2012-06-11 22:59:12
【问题描述】:
示例 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()));
【问题讨论】:
-
这并不奇怪,不是吗? CDATA 部分通常包含不符合 XML 格式或结构的文本,因此会被解析器忽略(意思是:它被认为是纯文本)。我不知道更改此标准化行为的设置,但由于在您的情况下,CDATA 部分基本上是另一个 XML 层次结构,我不明白为什么您不能将它委托给另一个 SAX 解析器实例。
标签: java android xml-parsing sax saxparser