Java Android-使用XPath解析XML

Java Android-使用XPath解析XML,java,android,xml,parsing,xpath,Java,Android,Xml,Parsing,Xpath,首先,感谢所有在这个问题上花点时间的人 第二,对不起我的英语(不是我的第一语言!) 这是我的问题 我正在学习Android,我正在制作一个应用程序,它使用一个XML文件来存储一些信息。我创建文件没有问题,但尝试使用XPath读取de XML标记(DOM、XMLPullParser等,只会给我带来问题)我至少能够读取第一个 让我们看看代码 以下是应用程序生成的XML文件: <dispositivo> <id>111</id> <nombre

首先,感谢所有在这个问题上花点时间的人

第二,对不起我的英语(不是我的第一语言!)

这是我的问题

我正在学习Android,我正在制作一个应用程序,它使用一个XML文件来存储一些信息。我创建文件没有问题,但尝试使用XPath读取de XML标记(DOM、XMLPullParser等,只会给我带来问题)我至少能够读取第一个

让我们看看代码

以下是应用程序生成的XML文件:

<dispositivo>
    <id>111</id>
    <nombre>Name</nombre>
    <intervalo>300</intervalo>
</dispositivo>
应用程序正确获取id值并将其显示在屏幕上(“id”和“nombre”变量分别分配给TextView),但“nombre”不起作用

我应该换什么?:)

谢谢你的时间和帮助。这个网站很有帮助


PD:我一直在整个网站上搜索响应,但没有找到任何响应。

您使用同一输入流两次,但第二次使用时,它已经在文件末尾。您必须再次打开流或将其缓冲(例如在
ByteArrayInputStream
中),然后重新使用它

在您的情况下,请执行以下操作:

inputSource = new InputSource(new FileInputStream(xmlDocument));
在这条线之前

XPathExpression  tag_nombre = xPath.compile("/dispositivo/nombre");
应该有帮助


请注意,您应该正确地关闭流。

问题是您不能多次重复使用流输入源-对
标记id.evaluate(inputSource)
的第一次调用已经读取了输入

一种解决方案是提前解析文档:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
Document document = documentBuilderFactory.newDocumentBuilder().parse(inputSource);

Source source = new DOMSource(document);

// evalute xpath-expressions on the dom source

不要忘记在try finally块中关闭输入流。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
Document document = documentBuilderFactory.newDocumentBuilder().parse(inputSource);

Source source = new DOMSource(document);

// evalute xpath-expressions on the dom source