Intereting Posts
Как получить даты из базы данных и проверить, перекрываются ли они? Почему sendTextMessage требует разрешения READ_PHONE_STATE? Что такое имя пакета в конструкторе RemoteViews? Использование диалога общего доступа в Android Facebook SDK. Как узнать, действительно ли пользователь разделяет или отменяет совместную деятельность? Как периодически сканировать устройства Bluetooth на Android Правильный способ использования YouTube.Builder Как передать два разных типа данных в AsyncTask, Android Android возвращается к первому действию при нажатии кнопки Удалить полосу прокрутки с помощью навигационного ящика для поддержки Android? Отключить доступ библиотеки библиотеки зависимостей Алгоритм шума в Samsung Galaxy SIII (GLES) Android + CardView добавляет поля в не-L-версии? Надлежащая структура приложения для Android с навигационным ящиком Ошибка Retrolambda: не удается получить свойство «destinationDir» на нулевом объекте Есть ли удобный способ создания Parcelable классов данных в Android с Kotlin?

Анализ недействительных амперсандов с помощью XmlPullParsers от Android

Я пишу небольшое приложение для скриншотов, которое потребляет XHTML – само собой разумеется, что XHTML недействителен: амперсанды не экранируются как & ,

Я использую XmlPullParser Android, и он извергает следующую ошибку при некорректно закодированном значении:

 org.xmlpull.v1.XmlPullParserException: unterminated entity ref (position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'> @55:134 in java.io.InputStreamReader@43b1ef70) 

Как мне обойти это? Я подумал о следующих решениях:

  1. Обтекание InputStream в другом, которое заменяет амперсанды на ref ref
  2. Конфигурирование анализатора, так что он волшебным образом принимает неверную разметку

Какие из них, вероятно, будут более успешными?

Я бы пошел с вашим первым вариантом, заменив амперсанды, похоже, более подходящим решением, чем другое. Второй вариант кажется скорее взломом, чтобы заставить его работать, приняв неправильную разметку.

Я застрял на этом около часа, прежде чем выяснять, что в моем случае «&» не удалось разрешить с помощью XML PULL PARSER, поэтому я нашел решение. Итак, вот фрагмент кода, который полностью его исправляет.

 void ParsingActivity(String r) { try { parserCreator = XmlPullParserFactory.newInstance(); parser = parserCreator.newPullParser(); // Here we give our file object in the form of a stream to the // parser. parser.setInput(new StringReader(r.replaceAll("&", "&amp;"))); // as a SAX parser this will raise events/callback as and when it // comes to a element. int parserEvent = parser.getEventType(); // we go thru a loop of all elements in the xml till we have // reached END of document. while (parserEvent != XmlPullParser.END_DOCUMENT) { switch (parserEvent) { // if u have reached start of a tag case XmlPullParser.START_TAG: // get the name of the tag String tag = parser.getName(); 

В значительной степени, что я делаю, я просто заменяю & &amp; Так как я имел дело с разбором URL. Надеюсь это поможет.