从 XML 获取子节点
Getting child nodes from an XML
在我的应用程序中,我有一个 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);
}
}
}
}
每当我获得项目标签 NodeList nl = doc.getElementsByTagName("Item");
时,我就会获得所有 <Item>
标签。当我得到第一个 <TableDetails>
标签时,我只需要前四个 <Item>
标签。
这怎么可能。提前致谢。
请更改代码:
NodeList nl = doc.getElementsByTagName("Item");
到
NodeList nl = eElement .getElementsByTagName("Item");
现在您将只获得相应的子值。
因为当您使用 doc 变量时,它会搜索整个文件。
而 eElement 仅搜索其 category/Main Node("TableDetails").
下的节点
另外请把第二个for loop
里面的变量名改成'j'
。您正在使用 'i'
而不是 'j'
。
检查一下。
在我的应用程序中,我有一个 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);
}
}
}
}
每当我获得项目标签 NodeList nl = doc.getElementsByTagName("Item");
时,我就会获得所有 <Item>
标签。当我得到第一个 <TableDetails>
标签时,我只需要前四个 <Item>
标签。
这怎么可能。提前致谢。
请更改代码:
NodeList nl = doc.getElementsByTagName("Item");
到
NodeList nl = eElement .getElementsByTagName("Item");
现在您将只获得相应的子值。
因为当您使用 doc 变量时,它会搜索整个文件。
而 eElement 仅搜索其 category/Main Node("TableDetails").
另外请把第二个for loop
里面的变量名改成'j'
。您正在使用 'i'
而不是 'j'
。
检查一下。