#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 для получения подробной информации.