xpath中的未知错误(使用xmlpullparser)

时间:2012-08-09 20:10:03

标签: android xml xpath xmlpullparser

我正在使用XmlPullParser打开文件,使用XPath来获取根目录。 (稍后我将修改我的代码以获取idx节点)

但是,我收到以下错误:

javax.xml.transform.TransformerException: Unknown error in XPath.

我在互联网上搜索过但没有找到任何可以解决此问题的内容。

try{
    XmlPullParser xpp = getResources().getXml(R.xml.x1);
    XPath xpath = XPathFactory.newInstance().newXPath();
    String askFor2 = "/root";
    NodeList creaturesNodes = (NodeList) xpath.evaluate(askFor2, xpp, XPathConstants.NODESET);
    Log.d("", "");
} catch (Exception ex) {
    String err = (ex.getMessage()==null)?"run thread failed":ex.getMessage();
    Log.e("bm run catch", err);
}

我的XML文件是

<?xml version="1.0"?>
<root>
    <child index="1">
        <idx index="1" />
        <idx index="2" />
        <idx index="3" />
        <idx index="4" />
        <idx index="5" />
        <idx index="6" />
        <idx index="7" />
    </child>
</root>

非常感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:2)

您将错误的属性传递给evaluate方法。尝试使用InputSource,

try{
    XPath xpath = XPathFactory.newInstance().newXPath();
    InputSource is = new InputSource(getResources().openRawResource(R.raw.xm));
    String askFor2 = "/root";
    NodeList creaturesNodes = (NodeList) xpath.evaluate(askFor2, is, XPathConstants.NODESET);
    Log.d("", "");
} catch (Exception ex) {
    Log.e("bm run catch", err);
}

答案 1 :(得分:0)

在我看来,您应该将InputSource作为第二个参数传递给xpath.evaluate(),而不是解析器。请记住,XPath通常可能需要遍历整个文档树,因此除了在一些特殊的受限情况下,它不能与流式解析一起使用:您需要读取整个文档,构建内存中的树模型并应用XPath到那。