Заставить XmlPullParser игнорировать пробелы?
Я анализирую Xml с XmlPullParser. Я просто хочу иметь дело с тегами Xml и текстом, содержащимся в них, однако XmlPullParser считывает пробельные символы (пробелы и возврат каретки) между тегами. Может ли он быть установлен, чтобы игнорировать этот пробел?
3 ответа
Я не использовал XmlPullParser раньше (поэтому извиняюсь, если это совершенно неправильно), но, посмотрев на javadocs, похоже, что когда вы вызываете nextToken(), вам нужно будет посмотреть возвращаемое значение и пропустить IGNORABLE_WHITESPACE.
Следующее было неуместно (спасибо, Jeff Hubbard): Кстати, вы вынуждены использовать XmlPullParser? Исходя из того, что вы пытаетесь достичь, я бы рассмотрел API более высокого уровня, например Simple. Я обычно использую JAXB, но это не по выбору, ха-ха.
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
}
Удачи
Добавление позднего ответа после поиска решения самостоятельно.
Парсер имеет 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);