XmlPullParser getText 返回奇怪的元素内容



我正在开发一个读写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."。

有什么想法吗?

你为什么要为布尔值而烦恼?通过这样做,您可以显著缩短代码:

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(),因为您仍在开始标记中。

试试这个,也许是因为你的实现而出了点问题。除此之外,它应该可以工作。另外,请注意,我将其放在尝试/捕获中,以便您实际上可以在解析时查看是否出了问题。

相关内容

最新更新