Ошибка XPath в Android - PullRequest
       1

Ошибка XPath в Android

3 голосов
/ 19 апреля 2011

Моя цель - выполнить XQuery с использованием XPath.

Мой 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()); (у меня есть TextView с именем Text2)

Когда я выполняю код и нажимаю кнопку, TextView остается пустым (нет ошибки для Force Close)

Заранее спасибо

1 Ответ

1 голос
/ 10 апреля 2012

Имена атрибутов должны начинаться с «@» при использовании XPath в Android.Так что измените

[gouvernourat='Tunis']

на

[@gouvernourat='Tunis']

Подробнее см. http://developer.android.com/reference/javax/xml/xpath/package-summary.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...