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