我有这个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Products>
<Product productName="testProduct1">
<Fields>
<Field name="Stack" />
<Field name="Overflow" />
</Fields>
<AnotherFields>
<Field name="Test" />
</AnotherFields>
</Product>
<Product productName="testProduct">
<Fields>
<Field name="StackOverflow" />
</Fields>
</Product>
</Products>
并且想要阅读具有属性product
的独占值的productName
的所有子标记,所有其他标记都要跳过。
这是我的Java代码,我被困住了:
public void mainParser(XmlResourceParser configXML, String productNameParameter)
throws XmlPullParserException, IOException {
int eventType = -1;
String strName, productName;
while (eventType != XmlResourceParser.END_DOCUMENT) {
if (eventType == XmlResourceParser.START_TAG) {
strName = configXML.getName();
if (strName.equals("Product")) {
if (eventType == XmlResourceParser.START_TAG) {
productName = configXML.getAttributeValue(null, "productName");
if (productName.equals(productNameParameter)) {
eventType = configXML.next();
//here is the problem
}
}
}
}
eventType = configXML.next();
}
}
有人可以帮忙吗?
答案 0 :(得分:1)
我建议只在一个级别而不是嵌套循环上检查事件类型,并使用布尔标志来指示您在特定的“Product”元素中:
boolean foundIt = false;
while (eventType != XmlResourceParser.END_DOCUMENT) {
strName = configXML.getName();
if (eventType == XmlResourceParser.START_TAG) {
if (!foundIt && strName.equals("Product")) {
productName = configXML.getAttributeValue(null, "productName");
if (productName.equals(productNameParameter)) {
foundIt = true;
}
}
else if (foundIt) {
// Children
}
}
else if (eventType == XmlResourceParser.END_TAG) {
if (foundIt && strName.equals("Product")) {
foundIt = false;
return; // You've found what you want, leave method
}
}
eventType = configXML.next();
}
现在,您不会在多个地方拨打configXML.next()
或查看eventType
,这很容易让人感到困惑。请注意,一旦foundIt
为真,我们就会停止查找“Product”标签并默认开始读取每个新元素。最后,当您阅读“产品”的结束标记时,请停止所有操作。