Ошибка XPath в Android

#java #android #xml #dom #xpath

#java #Android #xml #dom #xpath

Вопрос:

Моя цель — выполнить 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) resu<
        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. Что произойдет, если вы используете 0 для элемента вместо мне нравится это… Text2.setText(узлы.item(0).getNodeValue());

2. Почему Text2 написан заглавными буквами? Вы не должны правильно ссылаться на TextView, используя findViewById? В вашем коде есть метод main , они не используются в Android

3. Помог ли мой ответ решить вашу проблему? Вы пробовали решение?

Ответ №1:

Имена атрибутов должны начинаться с ‘@’ при использовании XPath в Android.
Поэтому измените

 [gouvernourat='Tunis']
  

Для

 [@gouvernourat='Tunis']
  

Обратитесь http://developer.android.com/reference/javax/xml/xpath/package-summary.html для получения подробной информации.