0

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

4

3 回答 3

1

我以前没有使用过 XmlPullParser (如果这是完全错误的,请道歉)但是看一下javadocs,看起来当你调用nextToken()时,你必须查看返回值并跳过IGNORABLE_WHITESPACE

以下是不合适的(感谢Jeff):顺便说一句,您是否被迫使用 XmlPullParser?根据您想要实现的目标,我会考虑使用更高级别的 API,例如Simple。我通常使用JAXB,但这不是选择哈哈。

于 2012-12-30T21:35:17.197 回答
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
    }

祝你好运

于 2013-08-30T18:38:44.527 回答
0

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

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

您可以通过调用next推进解析器或getEventType.

调用next会自动跳过IGNORABLE_WHITESPACE事件。此事件类型仅在调用nextToken更细粒度并命中所有事件类型时才会被命中。即使我们通过调用 next 跳过了“可忽略”的空白,解析器仍然发现几乎所有的空白都是不可忽略的,因此需要您允许跳过它。

    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);
于 2016-09-08T12:32:00.373 回答