【发布时间】:2014-05-04 13:13:02
【问题描述】:
我有一个这样的 XML
<reg>
<user>
<Name> abc</Name>
<Email> abc@xyz.com</Email>
<picture> sdCard/imges.145.jpg </Picture>
<Date> 12/12/2012</Date>
</user>
<user>
<Name> abc dfg</Name>
<Email> ertdg@xyz.com</Email>
<picture> sdCard/imges.145.jpg </Picture>
<Date> 23/12/2013</Date>
</user>
</reg>
我想获取特定节点的值并将它们添加到 ArrayList 以在 ListView 中显示 我已经尝试过这段代码,但它只给出了 Last Record 的值
Users setUser = new Users();
final ArrayList<Users> uData = new ArrayList<Users>();
Document xmlDocument = builder.parse(file);
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/reg/user/Name";
System.out.println(expression);
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
setUser.setName(nodeList.item(i).getTextContent());
}
String expression1 = "/reg/user/Email";
System.out.println(expression1);
NodeList nodeList1 = (NodeList) xPath.compile(expression1).evaluate(xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList1.getLength(); i++) {
System.out.println(nodeList1.item(i).getTextContent());
setUser.setEmail(nodeList1.item(i).getTextContent());
}
String expression2 = "/reg/user/Picture";
System.out.println(expression2);
NodeList nodeList2 = (NodeList) xPath.compile(expression2).evaluate(xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList2.getLength(); i++) {
System.out.println(nodeList2.item(i).getTextContent());
setUser.setimage(nodeList2.item(i).getTextContent());
}
String expression3 = "/reg/user/LastEdited";
System.out.println(expression3);
NodeList nodeList3 = (NodeList) xPath.compile(expression3).evaluate(xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList3.getLength(); i++) {
System.out.println(nodeList3.item(i).getTextContent());
setUser.setDate(nodeList3.item(i).getTextContent());
} uData.add(setUser);
我怎样才能让它显示所有记录?
【问题讨论】:
-
如何识别具体节点?
-
在我的代码中,我通过 XPATH 表达式识别节点。 . .
-
您的 setUser 对象在 for 循环迭代时被替换。您在 forloop 结束时将 setUser 添加到 uData。所以只有最后一个对象会被添加到数组列表中。这就是为什么你只得到最后一条记录
-
我知道这个原因,问题是我怎样才能在 1 (外循环)中实现这一点,所以我可以在所有 4 个节点中获取值并将其添加到 ArrayList,我这样做的方式是Xpath 我必须为每个点头运行一个单独的循环以获取其值并将其放入 NodeList...
-
哦。您可以保留名称、图像、日期、电子邮件的临时列表,而不是添加到对象中。现在您将所有元素放在单独的数组中。由于所有列表都没有相同的元素,您可以开始另一个循环。 For(int i=0;i
;i++){ uData= new UData(); uData.setImage=name.get(i).getname(); uData.setDate=date(i).getDate;等等等等。现在对象已准备好并添加到 uData.add(uData); }。但这不是最好的解决方案,这会导致严重的性能问题。如果可以的话,试试 simplexml,它很容易处理
标签: android xpath arraylist xml-parsing