我试图在我的j2me应用程序中解析一个简单的XML文件。但是解析失败了:
XML文件
<companies>
<company CompanyId="6">
<CompanyName>Test Company 1</CompanyName>
<SapNumber>0</SapNumber>
<RootCompanyId>1</RootCompanyId>
<ParentCompanyId /> </company>
</companies>Parser代码段
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");发布于 2009-07-29 11:58:23
我想我能看出这里出了什么问题。在匹配了<company>标记并获得了CompanyId属性的值之后,您将输入一个while循环。但是观察一下在这一点上会发生什么:
当您第一次执行that条件时,解析器将匹配<CompanyName>开始标记,因此if条件将为真,并且您将在标签内获得文本。
<CompanyName>标记内)或末尾标记(即。</CompanyName>).无论哪种情况,您的状态都将失败,因为您没有处于开始标记中。此时,您需要将下一个标记作为<company>,的结束标记,但是,您的状态仍未更改,这将无法满足。我最好的猜测是,内部指针指向<CompanyName>内部的文本节点,这就是您获得"unexpected type (position: Text: Test Company1..."消息的原因。
https://stackoverflow.com/questions/1158854
复制相似问题