难用到令人抓狂的w3c标准DOM解析API
Jun3
被.Net毒害太深,以至于离开.Net就发现自己原来是个菜鸟,一件在.net中可以很简单完成的事情,到了java下面可能就要让你抓狂。要解析Xml,Android提供的jar中包含了最基本的w3c DOM API和标准的SAX(Simple API for XML),因为常年沉侵在.Net的温床中,导致了对这些标准API的从来不闻不问,当使用到这些API时,也就只有抓狂了。。。没有XPath支持不说,看看下面这个Xml片段在标准DOM API中的Node结构便知道抓狂的含义了:
<root>
<!–xxx–>
<sub>123</sub>
</root>
首先,DOM里的Node不是在.net理解中的<a></a>这个叫一个node,任何xml中的元素都是node,<a></a>只是一种type为ELEMENT_NODE的node,此外还有很多type的node,常用的还有TEXT_NODE,上面XML片段的Node模型如下(*表示缩进):
root (NodeType: ELEMENT_NODE)
****\n (NodeType: TEXT_NODE,抓狂1:<root>后面的换行符\n也是一个Node!一个文本类型的Node,标准API中可以用getNodeValue()得到“\n”)
****<!–xxx–> (NodeType: COMMENT_NODE)
****\n (NodeType: TEXT_NODE,还是\n)
****sub (NodeType: ELEMENT_NODE)
********123 (NodeType: TEXT_NODE,抓狂2:<sub>中的文字也是一个node,getNodeValue()得到”123″。这个文字不是sub节点的nodeValue,而是一个新的node,sub节点的nodeValue会直接返回null)
****\n (NodeType: TEXT_NODE,sub节点后的换行符)
如果之前不了解w3c标准DOM API,很抱歉,上面的知识得花费你个把小时调试你才能学会。幸运的是除了标准API,我们还有更多的选择,DOM4J就是一个不那么让人抓狂的开源XML解析工具包。
3 Comments
Sorry, the comment form is closed at this time.
09:15 on June 20th, 2009
我觉得 W3C 的标准 DOM API 很自然喃,很多 API 都会把 \n 解析成 node 得嘛
09:18 on June 20th, 2009
确实,这就是被.Net毒害太深的下场。。。
17:00 on June 26th, 2009
你这好多了,如果你用C来读XML的话你就知道什么是麻烦了。