使用同名节点进行Android/Java XML解析
我需要一些关于如何用Java解析XML的建议,因为Java中有多个节点具有相同的标记。例如,如果我有一个如下所示的XML文件:使用同名节点进行Android/Java XML解析,java,android,xml,Java,Android,Xml,我需要一些关于如何用Java解析XML的建议,因为Java中有多个节点具有相同的标记。例如,如果我有一个如下所示的XML文件: <?xml version="1.0"?> <TrackResponse> <TrackInfo ID="EJ958083578US"> <TrackSummary>Your item was delivered at 8:10 am on June 1 in Wilmington DE 19801.</
<?xml version="1.0"?>
<TrackResponse>
<TrackInfo ID="EJ958083578US">
<TrackSummary>Your item was delivered at 8:10 am on June 1 in Wilmington DE 19801.</TrackSummary>
<TrackDetail>May 30 11:07 am NOTICE LEFT WILMINGTON DE 19801.</TrackDetail>
<TrackDetail>May 30 10:08 am ARRIVAL AT UNIT WILMINGTON DE 19850.</TrackDetail>
<TrackDetail>May 29 9:55 am ACCEPT OR PICKUP EDGEWATER NJ 07020.</TrackDetail>
</TrackInfo>
</TrackResponse>
您的商品于1980年6月1日上午8:10在威尔明顿交付。
5月30日上午11:07通知离开威尔明顿德19801。
5月30日上午10:08抵达威明顿19850单元。
5月29日上午9:55接受或接收新泽西州EDGEWATER 07020。
我可以得到“TrackSummary”,但我不知道如何处理“TrackDetail”,因为有超过1个。这个示例XML上可能有3个以上的值,所以我需要一种方法来处理它
到目前为止,我有以下代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xmlResponse));
Document dom = builder.parse(is);
//Get the ROOT: "TrackResponse"
Element docEle = dom.getDocumentElement();
//Get the CHILD: "TrackInfo"
NodeList nl = docEle.getElementsByTagName("TrackInfo");
String summary = "";
//Make sure we found the child node okay
if (nl != null && nl.getLength() > 0)
{
//In the event that there is more then one node, loop
for (int i = 0 ; i < nl.getLength(); i++)
{
summary = getTextValue(docEle,"TrackSummary");
Log.d("SUMMARY", summary);
}
return summary;
}
DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
InputSource is=新的InputSource(新的StringReader(xmlResponse));
文档dom=builder.parse(is);
//获取根:“TrackResponse”
Element docEle=dom.getDocumentElement();
//获取孩子:“TrackInfo”
NodeList nl=docEle.getElementsByTagName(“TrackInfo”);
字符串摘要=”;
//确保找到了子节点,一切正常
如果(nl!=null&&nl.getLength()>0)
{
//如果存在多个节点,则循环
对于(int i=0;i
我将如何处理整个“多个TrackDetail节点”的折磨?我不熟悉XML解析,所以我对如何处理类似的问题有点不熟悉。如果您可以随意更改实现,那么我建议您使用给定的实现
您可以在字符串数组中收集trackdetail,当您在XmlPullParser.END_标记中时,检查trackinfo标记END,然后停止,您可以这样尝试:
public Map getValue(Element element, String str) {
NodeList n = element.getElementsByTagName(str);
for (int i = 0; i < n.getLength(); i++) {
System.out.println(getElementValue(n.item(i)));
}
return list/MapHere;
}
公共映射getValue(元素,字符串str){
NodeList n=element.getElementsByTagName(str);
对于(int i=0;iDocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(f);
Element root = doc.getDocumentElement();
NodeList nodeList = doc.getElementsByTagName("TrackInfo");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i); // this is node under track info
// do your stuff
}
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
文档doc=db.parse(f);
元素根=doc.getDocumentElement();
NodeList NodeList=doc.getElementsByTagName(“TrackInfo”);
for(int i=0;i
欲了解更多信息,请点击下面的链接
这可能会有所帮助。您可以创建一个java arraylist来管理TruckDetail记录。。。再加上你认识的每一个人。是的,这篇文章需要一个答案。