我有一个基本方法 - ReadXML() - 从assets文件夹中读取xml文件。运行时不会抛出任何异常。但是从这个方法中我调用了一个doXML()方法,它尝试从xml文件中提取文本并将此文本设置为textviews。当doXML()方法运行时,我不断收到以下错误...生成的错误是
18:19:41.654: W/System.err(329): org.xmlpull.v1.XmlPullParserException: name expected (position:START_TAG @59:57 in java.io.InputStreamReader@44f049c8).
我试图缩短xml文件以查看错误的位置......本质上,如果有四个“试验”,每个都带有标题,作者等,前三个实际上会加载到textviews中......尽管在LogCat中仍会生成上面的错误...但最后一个错误不会加载...所以代码逻辑可能存在问题,但无法解决。
提前感谢。
<trial>
<title>The Book</title>
<author></author>
....
</trial>
我认为代码可能比它需要的更复杂......但是无法弄清楚为什么doXML()方法无法正常运行。
public void ReadXML() throws XmlPullParserException, IOException
{
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
xpp = factory.newPullParser();
InputStream raw = getApplicationContext().getAssets().open("trial_info.xml");
xpp.setInput(raw,null);
}
}
public void doXML() throws XmlPullParserException, IOException{
int eventType = XmlPullParser.START_TAG;
while(eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.TEXT && xpp.getText().equals(selectedTrial))
{
trialTxt = (TextView)findViewById(R.id.TrialAbbrevData);
trialTxt.setText(xpp.getText());
Log.d("what is this", xpp.getText());
while(!(eventType == XmlPullParser.END_TAG && xpp.getName().equals("...")))
{
if(eventType == XmlPullParser.START_TAG && xpp.getName().equals("trialName"))
{
eventType = xpp.next();
if(eventType == XmlPullParser.TEXT)
{
trialTxtDesc = (TextView)findViewById(R.id.TrialNameData);
trialTxtDesc.setText(xpp.getText());
Log.d("in loop",xpp.getText());
}
}
if(eventType == XmlPullParser.START_TAG && xpp.getName().equals("trialDetails"))
{
eventType = xpp.next();
if(eventType == XmlPullParser.TEXT)
{
trialTxtConc = (TextView)findViewById(R.id.TrialDescData);
trialTxtConc.setText(xpp.getText());
}
}
if(eventType == XmlPullParser.START_TAG && xpp.getName().equals("trialResults"))
{
eventType = xpp.next();
if(eventType == XmlPullParser.TEXT)
{
trialTxtConc = (TextView)findViewById(R.id.TrialResultsData);
trialTxtConc.setText(xpp.getText());
}
}
if(eventType == XmlPullParser.START_TAG && xpp.getName().equals("trialConclusion"))
{
eventType = xpp.next();
if(eventType == XmlPullParser.TEXT)
{
trialTxtConc=(TextView)findViewById(R.id.TrialConclusionData);
trialTxtConc.setText(xpp.getText());
}
}
if(eventType == XmlPullParser.START_TAG && xpp.getName().equals("whatItMeans"))
{
eventType = xpp.next();
if(eventType == XmlPullParser.TEXT)
{
trialTxtMeans = (TextView)findViewById(R.id.TrialWIMData);
trialTxtMeans.setText(xpp.getText());
}
}
eventType = xpp.next();
}
}
eventType = xpp.next();
}
}