WEB开发网
开发学院手机开发Android 开发 关于 Android 中的 getTextContent() 方法 阅读

关于 Android 中的 getTextContent() 方法

 2010-03-04 16:14:00 来源:WEB开发网   
核心提示:在解析xml文档的时候,得到节点中的文本内容是很重要的,关于 Android 中的 getTextContent() 方法,一般情况下,用Node类的getTextContent()方法就可以实现了,这是本人第一次写博客,希望上面的内容不是太火星了,而且这也是在 J2SE中最常用的方法,但在android中却很悲剧的没

在解析xml文档的时候,得到节点中的文本内容是很重要的。一般情况下,用Node类的getTextContent()方法就可以实现了,而且这也是在 J2SE中最常用的方法。但在android中却很悲剧的没有这个方法,让我这个android加xml新手有点小郁闷啊。

我也看了很多其他的方法,但如果你不确定节点的类型又需要得到节点中的文本信息,就比较困难了。在Node类的其他方法中,最容易被考虑到得就是得到nodeName、nodeValue 和 attributes的值的一些方法,但如果你不知道节点类型的话,这些方法得到的这些值往往就是一个悲剧性的null。比如说你只知道现在是Element,那么nodeName可以得到正确的值,但nodeValue就是null而不是以你想得到的文本信息。

为什么android的Node类里就没有getTextContent()方法呢?要使用xml里的Node类,就需要 import一个org.w3c.dom.Node,如果你打开android的sdk文档,你就会发现里面居然有一个org.w3c.dom.Node 包,而这个包没有我们所要的getTextContent()方法。所以我们可以很自然地认为,当你新建一个android项目并要import一个 org.w3c.dom.Node包时,系统给你的就是android里的那个包。至于为什么会这样,现在我还不知道。于是我们又很自然地想到,可不可以修改某些东西使得系统加载的是我们需要的包呢?在网上已经有不少人遇到了没有getTextContent()方法的问题,不过大多是在写J2EE的东西时。有高手提出了解压rt.jar包做相应修改的方法,据说可行,不过可能并不适合我们的android,感兴趣的网友们可以去搜一下,很容易搜到。

在我的这个android项目里,只需要提取出xml文档里的文本节点的信息,也即Text类型的节点的信息,所以我换了一个方法,就是直接使用getNodeValue()方法。为什么这个时候可以呢?仔细阅读API文档你就会发现,Text类型的节点用 getNodeValue()方法读出的就是文本节点的内容。也就是说当你确定了一个节点是TEXT_NODE类型时,你就可以用 getNodeValue()方法来提取文本信息了,当然这之前还需要做一些小小的转换,比如Text text = (Text) node;String s = text.getNodeValue();这样做的前提是xml文档本身并不是非常复杂和庞大,并且你对该xml文档的格式比较熟悉。

以上的讨论都是针对于你要提取的信息就在Text类型的节点里而你的android又没有getTextContent()方法,在J2EE里也可能会遇到类似的问题,但大家可以放心的是,在J2SE里一般是不存在这样的问题的。如果你的xml文档结构有些复杂并且要提取的信息又多种多样的话,我并不保证上面这个方法可行。当然,作为google的android,我也不认为修改rt.jar是个好办法,毕竟人家是用在Gphone这个特定的平台上的,谁也不敢担保这其中没有什么小故事或者其他什么的。

这是本人第一次写博客,希望上面的内容不是太火星了。如果大家有什么的问题或者意见的话,很欢迎大家留言讨论

Tags:关于 Android getTextContent

编辑录入:coldstar [复制链接] [打 印]
赞助商链接