【问题标题】:Can XmlPullParser be configured to NOT ignore whitespace?可以将 XmlPullParser 配置为不忽略空格吗?
【发布时间】:2012-08-14 06:37:10
【问题描述】:

我正在使用 XmlPullParser 来解析一些自定义 XML。我像这样打开 XML 文件...

XmlPullParser xpp = activity.getResources().getXml(R.xml.myXML);

后来我阅读了以下 XML 节点

<L>  ####</L>

使用代码

String str = "";
if( xpp.next() == XmlPullParser.TEXT )
    str = xpp.getText();
return str;

而不是返回

'  ####'

我明白了

' ####'

(为清楚起见,我添加了单引号。)注意缺少的前导空格。

似乎 getText 正在剥离前导空格?当 XML 不包含前导空格时,我的代码按预期工作。

我找不到任何允许我告诉它保留所有空格的 XMLPullParser 属性。我也不能更改 XML 以在带有前导空格的文本周围添加双引号。

【问题讨论】:

  • 据我所知,它会这样做,因为在 XML 中,双空格被视为一个空格(而不仅仅是前导)。我不相信XmlPullParser 有办法解决这个问题。
  • 你读过this吗?
  • Eric - 只有当双空格领先时,才会删除其中一个空格。如果双空格在字符串中间,则保留。
  • gontard - 是的,阅读您的链接。尝试了其他一些方法,但都没有改变任何东西。
  • 你是在解析推箱子的关卡吗? :) 我遇到了同样的问题并找到了可能的解决方案hereQuoting the text 在我的情况下是最可以接受的,因为它不会在等宽文本编辑器中破坏级别,保留空格。作为替代方案,您始终可以使用原始 Java 来解析 XML。

标签: java android android-xml


【解决方案1】:

XmlPullParser.next() 和 XmlPullParser.getText() 可以以不可预知的方式将内容分成几部分返回。在您的情况下,如果它在 xpp.next() 上迭代而不连接各个部分,则可能第一个空格字符作为第一部分返回并由您的程序静默删除。算法应该更多的是:

String str = "";
while (xpp.next() == XmlPullParser.TEXT) {
    str += xpp.getText();
}
return str;

【讨论】:

  • 您的建议听起来很有希望,但并没有改变任何东西。我进入 while 循环,然后下一个 xpp.next() 调用退出。我什至尝试了以下没有改变...String str = ""; while(true) { int r = xpp.nextToken(); if( r != XmlPullParser.TEXT &amp;&amp; r != XmlPullParser.IGNORABLE_WHITESPACE ) break; str += xpp.getText(); } return str;
猜你喜欢
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 2012-11-25
  • 2017-07-07
  • 2021-09-13
  • 1970-01-01
相关资源
最近更新 更多