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