我正在用XmlPullParser解析Xml。我只想处理Xml标记和其中包含的文本,但是,XmlPullParser读取标记之间的空白文本(空格和回车)。是否可以将其设置为忽略此空格?
发布于 2013-08-31 02:38:45
如果有忽略空白的设置,则为IDK。如果将当前节点作为字符串进行跟踪,则可以编写代码以忽略空格。如果当前节点为空,则忽略文本。我的测试显示它只是转义换行符之类的。我围绕它进行了如下优化。这在我正在使用的上有效,在您的上可能不起作用。
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
}祝好运
发布于 2016-09-08 20:32:00
在自己寻找解决方案后,添加了一个延迟的答案。
解析器有一个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);https://stackoverflow.com/questions/14093779
复制相似问题