让XmlPullParser忽略空格?

时间:2012-12-30 19:15:54

标签: java android xml xml-parsing xmlpullparser

我正在使用XmlPullParser解析Xml。我只是想处理Xml标签和它们中包含的文本,但是,XmlPullParser读取标签之间的空白文本(空格和回车)。它可以设置为忽略这个空格吗?

3 个答案:

答案 0 :(得分:1)

我之前没有使用过XmlPullParser(如果这是完全错误的话,请道歉)但是只要看一下javadoc就好了,看起来当你调用nextToken()时,你必须查看返回值并跳过超过IGNORABLE_WHITESPACE

以下内容不合适(感谢Jeff): BTW您是否被迫使用XmlPullParser?根据您尝试实现的声音,我会考虑更高级别的API,例如Simple。我通常使用JAXB,但这不是选择哈哈。

答案 1 :(得分:1)

IDK,如果有设置忽略空格。如果您将当前节点跟踪为字符串,则可以编码以忽略空格。如果当前节点为空,则忽略该文本。我的测试显示它只是逃脱了换行等。我对它进行了如下优化。 危险这适用于我正在使用它的xml可能不适合你的

String N="";  // Yes I know its Capitalized but its the Current Node and very important to keep track of.


if (eventType == XmlPullParser.START_TAG) {
    N = xpp.getName();//save the name of the node.

...

} else if (eventType == XmlPullParser.END_TAG) {
    N = "";//clear the name of the node.
} else if (eventType == XmlPullParser.TEXT) {
    //if the name of the node is not blank then process it
if (!N.equals("")) {
        //I have a node so process it
    }

祝你好运

答案 2 :(得分:0)

自己寻找解决方案后添加迟到的答案。

解析器有isWhiteSpace()方法。它只能在与文本相关的事件类型上调用(例如TEXTCDSECTIGNORABLE_WHITESPACE),否则会抛出。

您可以通过调用提升解析器的nextgetEventType来获取事件类型。

调用next会自动跳过IGNORABLE_WHITESPACE事件。仅在调用nextToken时才会触发此事件类型,该 boolean isEoD = false; do{ switch (parser.next()){ default: break; case XmlPullParser.TEXT: if(!parser.isWhitespace()) //Throws if called on wrong eventType System.out.println("Text: " + parser.getText()); break; case XmlPullParser.START_TAG: case XmlPullParser.END_TAG: System.out.println("TAG: " + parser.getName()+ "\n"); break; case XmlPullParser.END_DOCUMENT: isEoD = true; } }while(!isEoD); 更精细并且会触及所有事件类型。即使我们通过调用next来跳过“可忽略的”空格,解析器仍然发现几乎所有的空白都是不可签名的,因此需要您允许跳过它。

<article-component>
  <div ngSwitch="article.type">
    <template-a *ngSwitchCase="a" [article]="article">
    </template-a>
    <template-b *ngSwitchCase="b" [article]="article">
    </template-b>
    <template-c *ngSwitchCase="c" [article]="article">
    </template-c>
  </div>
</article-component>