Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让XmlPullParser忽略空白?_Java_Android_Xml_Xml Parsing_Xmlpullparser - Fatal编程技术网

Java 让XmlPullParser忽略空白?

Java 让XmlPullParser忽略空白?,java,android,xml,xml-parsing,xmlpullparser,Java,Android,Xml,Xml Parsing,Xmlpullparser,我正在使用XmlPullParser解析Xml。我只想处理Xml标记和其中包含的文本,但是XmlPullParser在标记之间读取空白文本(空格和回车)。是否可以将其设置为忽略此空白?我以前没有使用过XmlPullParser(如果这完全是错误的,请道歉),但是浏览一下javadocs,似乎在调用时,您必须查看返回值并跳过 以下内容是不合适的(谢谢):顺便说一句,您是否被迫使用XmlPullParser?根据它强>声音< /强>,就像你试图实现的那样,我会考虑更高级的API。我通常使用,但这不是

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

我以前没有使用过XmlPullParser(如果这完全是错误的,请道歉),但是浏览一下javadocs,似乎在调用时,您必须查看返回值并跳过


以下内容是不合适的(谢谢):顺便说一句,您是否被迫使用XmlPullParser?根据它<>强>声音< /强>,就像你试图实现的那样,我会考虑更高级的API。我通常使用,但这不是我的选择哈哈。

IDK,如果有忽略空白的设置。如果以字符串形式跟踪当前节点,则可以编写代码以忽略空白。如果当前节点为空,则忽略文本。我的测试显示,这只是逃逸线饲料等。我对它进行了如下优化危险这对我正在使用的xml有效,但对您的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
    }

祝你好运

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

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

您可以通过调用推进解析器的
next
getEventType
来获取事件类型

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

    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);

由于内存限制,他可能正在使用pull解析器。我不确定您是否熟悉Android,但是使用内存充足的AST解析大型XML文档是不可能的——您必须使用拉式解析来处理超过一定大小的任何内容。关于他可以使用XmlPullParser做什么的实际建议是正确的,还是有更好的方法?显然,我已经习惯于处理服务器而不是手机了哈哈:)有趣!根据文档的大小(如果他选择拉式解析器,它很可能很大),那么拉式解析可能是处理它的最佳方式。至于跳过空白,我不确定。我从来不需要处理足够大的xml文档来处理它(我的祸根是JSON)。是的,我想我只需要手动跳过可忽略的空白,我希望有一个设置可以自动跳过它。我正在解析的XML文档实际上很小,但我使用的是XmlPullParser,因为这是Google为Android推荐的-