使用同名节点进行Android/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.</

我需要一些关于如何用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.</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;i
您可以参考下面的代码

DocumentBuilderFactory 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记录。。。再加上你认识的每一个人。是的,这篇文章需要一个答案。