【问题标题】:Dom parsing in AndroidAndroid中的Dom解析
【发布时间】:2011-06-14 13:19:10
【问题描述】:

如果我解析包含<p>Some Text</p> 标签的标签,我会得到一个空指针异常。

我的RSS提要如下:

<quaddeals_conditions><p>Limit one QuadDeal</p></quaddeals_conditions>

我的代码是:

if (name.equalsIgnoreCase("quaddeals_conditions")) {
    property.normalize();
    conditions = property.getFirstChild().getNodeValue();   
}

【问题讨论】:

  • 你能发布你的 Logcat 消息和你的代码的一些详细解释吗?

标签: android dom xml-parsing


【解决方案1】:

你有一个元素

在元素内。

因此检索所有四边形,然后迭代每一个并从中检索 p 元素:

DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(this.inputStream);
Element root = dom.getDocumentElement();

// snip

NodeList items = root.getElementsByTagName("quaddeals_conditions");
for (int i = 0; i < items.getLength(); i++) {
            Node item = items.item(i);
            NodeList properties = item.getChildNodes();
            for (int j = 0; j < properties.getLength(); j++) {
                Node property = properties.item(j);
                String name = property.getNodeName();
                if (name.equalsIgnoreCase("p")) {
                    property.getFirstChild().getNodeValue(); // Your paragraph data
                }
            }
}

希望这会有所帮助。

【讨论】:

  • 我在解析 dom 时总是遇到这种情况,并认为您的方法是正确的。他可能需要下降几个级别,但我相信你已经向他展示了光明;)
  • 段落本身是一个元素(在 quaddeals 元素内)。你真的应该检查你的 name 变量是否不为空(使用调试器,日志输出)我也不明白为什么你将 NullPointer 与 println 方法结合使用。您可以发布受影响的代码行吗?也许异常发生在其他地方。
【解决方案2】:

“名称”不是 NULL 吗?我没有看到你检查。 如果可能的话,比较其他方式是一种很好的编码习惯:

if ("quaddeals_conditions".equalsIgnoreCase(name))...

因此,即使“name”为 NULL,您也不会收到 NullPointerException。 在访问某些对象成员之前,请始终检查 not null。

【讨论】:

  • 01-24 20:04:24.858: 详细/异常 ee(447): java.lang.NullPointerException: println 需要一条消息
  • 如果您Log.x() 不是字符串,您将收到“println 需要消息”错误。如果 Object 是唯一的参数,请始终添加 .toString()Log.d(TAG,myNode) 将失败,Log.d(TAG,myNode.toString()) 有效,Log.d(TAG,"Here: "+myNode) 也有效,因为很明显您正在构建一个字符串。所以,你得到的错误来自于日志记录;)
猜你喜欢
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多