java - Android 中的 XPath 错误

标签 java android xml dom xpath

我的目标是使用 XPath 执行 XQuery。

我的 XML 文件是:

<?xml version="1.0" encoding="UTF-8"?>
<postes>
    <poste>
        <gouvernourat>Kairouan</gouvernourat>
        <ville>Kairouan sud</ville>
        <cp>3100</cp>
    </poste>
    <poste>
        <gouvernourat>Tunis</gouvernourat>
        <ville>Ghazela</ville>
        <cp>1002</cp>
    </poste>
</postes>

我的 Java 代码是:

package xmlparse;


import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class QueryXML {
    public void query() throws ParserConfigurationException, SAXException,
            IOException, XPathExpressionException {
        // Standard of reading a XML file
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;
        XPathExpression expr = null;
        builder = factory.newDocumentBuilder();
        doc = builder.parse("a.xml");  //C:\\Users\\aymen\\Desktop\\

        // Create a XPathFactory
        XPathFactory xFactory = XPathFactory.newInstance();

        // Create a XPath object
        XPath xpath = xFactory.newXPath();

        // Compile the XPath expression
        expr = xpath.compile("/postes/poste[gouvernourat='Tunis']/ville/text()");
        // Run the query and get a nodeset
        Object result = expr.evaluate(doc, XPathConstants.NODESET);

        // Cast the result to a DOM NodeList
        NodeList nodes = (NodeList) result;
        for (int i=0; i<nodes.getLength();i++){
            System.out.println(nodes.item(i).getNodeValue());
        }
    }

    public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
        QueryXML process = new QueryXML();
        process.query();
    }
}

当我启动此 Java 代码时,结果会正确显示在控制台上 (System.out.println)

但是如果我将此代码复制到我的 Android 应用程序并将 System.out.println(nodes.item(i).getNodeValue()); 更改为 Text2.setText(nodes. item(i).getNodeValue());(我有一个名为 Text2 的 TextView)

当我执行代码并单击按钮时,TextView 保持为空(Force Close 没有错误)

提前致谢

最佳答案

在 Android 中使用 XPath 时,属性名称需要以“@”开头。
所以改变

[gouvernourat='Tunis']

[@gouvernourat='Tunis']

引用http://developer.android.com/reference/javax/xml/xpath/package-summary.html了解详情。

关于java - Android 中的 XPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5717557/

相关文章:

java - 禁用宽度继承?

java - 单击通知中的按钮时启动 Activity

java - 用于插入表的 DB2 数据库特殊字符

java - 使用内容解析器查询从联系人中获取号码 - 特殊情况

android - android中的sqlite聚合max(sum())错误

java - 使用 Firebase-UI (Android) 的 Firestore 聊天应用

Java DOM - 依次插入一个元素

xml - 如何从 json 文件(或 xml 文件)创建 vb.net 对象类

java - 按钮不起作用。通过文本字段输入数据

来自 StringIO 源的 Python xml etree DTD?