从XML获取子节点

时间:2015-01-01 08:06:03

标签: android xml dom xml-parsing domparser

在我的应用程序中,我有一个XML文件,我想解析XML文件并从XML标记中提取数据。这是我的XML文件。

  <?xml version='1.0' encoding='utf-8'?>
    <OrdersEnquiryResponse Message="" >

       <TableDetails Outlet="S2" Date="01/01/15" Time="12:19:47" TableNo=" 1" Covers="2" Waiter="DD " KOTs=" 4981"/>

                <Items>
                    <Item Code="IBMCF" Name="BRANDY-MC.NO.1-750ML" Qty=" 1.000" Instructions="" Status="F"/>
                    <Item Code="IBMHF" Name="BRANDY-MANSION HOUSE-750ML" Qty=" 1.000" Instructions="" Status="F"/>
                    <Item Code="IBCRF" Name="BRANDY-CAESAR-750ML" Qty=" 1.000" Instructions="" Status="P"/>
                    <Item Code="IBLVF" Name="BRANDY�LOUIS VERNANT�750ML" Qty=" 1.000" Instructions="" Status="P"/>
               </Items>


       <TableDetails Outlet="S2" Date="01/01/15" Time="12:19:47" TableNo=" 4" Covers="2" Waiter="DD " KOTs=" 4982"/>

              <Items>
                    <Item Code="IBMRF" Name="BRANDY�MORPHEUS-XO-PREMIUM-750ML" Qty=" 1.000" Instructions="" Status="F"/>
                    <Item Code="IBMCF" Name="BRANDY-MC.NO.1-750ML" Qty=" 1.000" Instructions="" Status="F"/>
                    <Item Code="IBCRF" Name="BRANDY-CAESAR-750ML" Qty=" 1.000" Instructions="" Status="P"/>
                    <Item Code="IBLVF" Name="BRANDY�LOUIS VERNANT�750ML" Qty=" 1.000" Instructions="" Status="P"/>
             </Items>

     </OrdersEnquiryResponse>

我使用DOM解析器来解析上面的XML文件。

        Document doc = parser.getDomElement(xml);

        NodeList nlll = doc.getElementsByTagName("TableDetails");

            int category_len = nlll.getLength();// length of Table Details
            Log.d("LENGTH 0", category_len + "");

            for (int i = 0; i < nlll.getLength(); i++) {
                Node nNode = nlll.item(i);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;

                    outlet = eElement.getAttribute(KEY_OUTLET);
                    order_date = eElement.getAttribute(KEY_DATE);
                    order_time = eElement.getAttribute(KEY_TIME);
                    tbno = eElement.getAttribute(KEY_TNO);
                    waiter = eElement.getAttribute(KEY_WAITOR);
                    kotNo = eElement.getAttribute(KEY_KOT);
                    no_of_coverss = eElement.getAttribute(KEY_COVER);
                    System.out.println(order_date);
                    System.out.println(order_time);


                    NodeList nl = doc.getElementsByTagName("Item");

                    int category_len1 = nl.getLength();// length of Item
                    Log.d("LENGTH 1", category_len1 + "");
                    column1 = new String[category_len1];
                    column2 = new String[category_len1];
                    column3 = new String[category_len1];
                    column4 = new String[category_len1];
                    column5 = new String[category_len1];
                    column6 = new String[category_len1];


                    for (int j = 0; j < nl.getLength(); j++) {
                        Node nNode1 = nl.item(i);
                        if (nNode1.getNodeType() == Node.ELEMENT_NODE) {
                            Element eElement1 = (Element) nNode1;

                            column4[i] = (i + 01) + "";
                            column5[i] = eElement1.getAttribute(KEY_CODE);
                            column1[i] = eElement1.getAttribute(KEY_NAME);
                            column2[i] = eElement1.getAttribute(KEY_QUANTITY);
                            column3[i] = eElement1.getAttribute(KEY_INSTRUCTION);
                            column6[i] = eElement1.getAttribute(KEY_STATUS);

                        }                       
                    }

                }
            }

每当我收到Item标记NodeList nl = doc.getElementsByTagName("Item");时,我都会获得所有<Item>标记。当我获得第一个<Item>标记时,我只需要前四个<TableDetails>标记。 如何才能实现这一目标。提前谢谢。

1 个答案:

答案 0 :(得分:1)

请更改代码:

NodeList nl = doc.getElementsByTagName("Item");

 NodeList nl = eElement .getElementsByTagName("Item");

现在您将只获得相应的子值。

因为当您使用doc变量时,它将搜索整个文件。

eElement仅搜索其category/Main Node("TableDetails").

下的节点

另请将变量名称更改为第二个'j'内的for loop。您使用'i'代替'j'

检查出来。