我正在开发一个读取和写入XML的Android应用程序。毫无疑问,这不是一个奇特的应用程序。我正在使用XmlPullParser来读取/解析XML文件。当我调用getText时,我得到一个奇怪的值,而不是XML文件中的值。我开始拿出我要解决问题的小头发了。
应用程序非常简单。我有五个编辑框,允许用户输入字母数字数据。按下保存按钮后,数据将以XML格式保存到本地文件中。 XML格式不正确,因为它没有声明。
XML文件看起来像
<TESTXML>
<Something1>value</Something1>
<Something2>value</Something2>
<Something3>value</Something3>
</TESTXML>
在编写XML时,我正在做以下事情:
String sSome1= xmlSome1EditText.getText().toString();
String sSome2= xmlSome2EditText.getText().toString();
String sSome3= xmlSome3EditText.getText().toString();
XmlSerializer xmlSerializer = Xml.newSerializer();
xmlSerializer.startTag("", "TESTXML");
xmlSerializer.startTag("", "Something1");
xmlSerializer.text("value");
xmlSerializer.endTag("", "Something1");
xmlSerializer.startTag("", "Something2");
xmlSerializer.text("value");
xmlSerializer.endTag("", "Something2");
xmlSerializer.startTag("", "Something3");
xmlSerializer.text("value");
xmlSerializer.endTag("", "Something3");
xmlSerializer.endTag("", "TESTXML");
xmlSerializer.endDocument();
我正在使用RandomAccessFile将XML数据写入本地文件。
在XML的读/解中,我正在执行以下操作:
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
InputStream is = openFileInput("myxml.xml");
xpp.setInput(is);
int eventType = xpp.getEventType();
String sSome1 = "";
String sSome2 = "";
String sSome3 = "";
bool bSome1 = false;
bool bSome2 = false;
bool bSome3 = false;
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_TAG)
{
if( xpp.getName().equals("Something1") )
{
bSome1 = true;
}
else if( xpp.getName().equals("Something2") )
{
bSome2 = true;
}
else if( xpp.getName().equals("Something3") )
{
bSome3 = true;
}
}
else if(eventType == XmlPullParser.END_TAG)
{
bSome1 = false;
bSome2 = false;
bSome3 = false;
}
else if(eventType == XmlPullParser.TEXT)
{
if( bSome1 )
{
sSome1 = xpp.getText();
}
else if ( bSome2 )
{
sSome2 = xpp.getText();
}
else if ( bSome3 )
{
sSome3 = xpp.getText();
}
}
eventType = xpp.next();
}
请原谅任何复制/粘贴错误。
我没有执行任何复杂的处理,只是简单地解析XML。我已经验证节点名称是正确的。我读过的每篇文章都表明这种方法应该得到适当的价值。但是每次调用getText时,我都希望返回XML文件中的值,但是我得到的值类似于“android.widget.EditText ..”
有什么想法吗?
答案 0 :(得分:4)
你为什么要打扰布尔?您可以通过以下方式显着缩短代码:
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
InputStream is = openFileInput("myxml.xml");
xpp.setInput(is);
int eventType = xpp.getEventType();
String sSome1 = "";
String sSome2 = "";
String sSome3 = "";
while (eventType != XmlPullParser.END_DOCUMENT) {
switch(eventType) {
case XmlPullParser.START_TAG:
String tagName = xpp.getName();
if (tagName.equalsIgnoreCase("Something1")) {
sSome1 = xpp.nextText();
}
else if (tagName.equalsIgnoreCase("Something2")) {
sSome2 = xpp.nextText();
}
else if (tagName.equalsIgnoreCase("Something3")) {
sSome3 = xpp.nextText();
}
break;
}
eventType = xpp.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
请注意nextText()
而不是getText()
,因为您仍处于起始标记中。
试试这个,可能是因为你的实现出了问题。除此之外,它应该工作。另外,请注意我把它放在try / catch中,这样你就可以在解析时看到出错了。