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