kxml2解析简单的XML
问题描述:
我想解析我的j2me应用程序中的简单XML文件。但分析失败:kxml2解析简单的XML
XML文件
<companies>
<company CompanyId="6">
<CompanyName>Test Company 1</CompanyName>
<SapNumber>0</SapNumber>
<RootCompanyId>1</RootCompanyId>
<ParentCompanyId /> </company>
</companies>
分析器片段
KXmlParser parser = new KXmlParser();
parser.setInput(new InputStreamReader(new ByteArrayInputStream(input.getBytes())));
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "companies");
while(parser.nextTag() == XmlPullParser.START_TAG)
{
Company temp_company = new Company();
parser.require(XmlPullParser.START_TAG, null, "company");
String CompanyID = parser.getAttributeValue(0);
temp_company.putValue("CompanyId", CompanyID);
while(parser.nextTag() == XmlPullParser.START_TAG)
{
if(parser.getName() == "CompanyName")
{
temp_company.putValue("CompanyName", parser.nextText());
}
}
parser.require(XmlPullParser.END_TAG, null, "company");
listCompany.put(CompanyID, temp_company);
}
parser.require(XmlPullParser.END_TAG, null, "elements");
答
我想我可以看到是怎么回事错在这里。在匹配<company>
标签并获得CompanyId属性的值后,您将输入一个while循环。但观察在这一点上会发生什么:
- 你执行,而条件下的第一次,分析器将匹配
<CompanyName>
开始标记,因此如果条件将是真实的,你会得到里面的文本标签。 - 我不KXML的内部工作过于亲密,但是,从第二次迭代解析器状态必须是在文本节点指向(也就是
<CompanyName>
标签内),或在结束标记(即</CompanyName>
)。无论哪种方式,你条件会失败,因为你不在开始标签。 - 此时您需要下一个标签为
<company>
的结束标签,但是,您的状态仍未更改,因此不会得到满足。
我最好的猜测是,内部指针在里面<CompanyName>
文本节点指向,这就是为什么你得到"unexpected type (position: Text: Test Company1..."
消息。
解析失败如何?你有例外吗? – kgiannakakis 2009-07-21 12:28:18