Получение Xerces-for-Android для работы с DocumentBuilderFactoryImpl и TransformerFactoryImpl

Мне нужно проанализировать XML-файл в DOM. Я также хочу проверить это на схеме XSD и иметь возможность использовать трансформатор для преобразования этого с помощью таблицы стилей XSL. Хотя это отлично работало как обычное Java-приложение, у меня были серьезные проблемы с попыткой заставить это работать на Android.

  1. Во-первых, мне пришлось обнаружить, что парсер Android DOM жестко закодирован, чтобы отказаться от проверки . Вот почему я решил попробовать использовать Xerces вместо собственной поддержки Android XML.
  2. Чтобы заставить Xerces работать на Android, я понимаю, что для предотвращения конфликтов с ява-базой ява нужна переупаковка . Поэтому я последовал за предложением, которое несколько раз предложили использовать библиотеку Xerces для Android в Google Code . Примечание. Поскольку Google Code закрыт, теперь он был перенесен на (в настоящее время такую ??же) библиотеку Xerces-for-Android в Github .
  3. Как указывалось, эта библиотека может вызывать NoClassDefFoundErrorразличные классы. В моем приложении я столкнулся с этой проблемой

    • DocumentBuilderFactory.newInstance()(что необходимо DocumentBuilderFactoryImpl).
    • TransformerFactory.newInstance()(что необходимо TransformerFactoryImpl).

Есть ли советы, как заставить Xerces-for-Android работать с ними?

android,xslt,xml-parsing,xsd-validation,domparser,

1

Ответов: 1


0 принят

Для проблемы DocumentBuilderFactoryImpl, поскольку отсутствующий класс является частью пакета Xerces-for-Android, просто не найден автоматически, возможно, есть две возможные проблемы:

  1. Как предлагается здесь , можно попытаться восстановить флягу с обновленными настройками, позволяющими автоматически находить класс.
  2. Поскольку newInstance()также предоставляет перегруженную версию, которая позволяет напрямую указать недостающий пакет, я нашел, что проще было просто ввести путь вручную:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance
                      ("mf.org.apache.xerces.jaxp.DocumentBuilderFactoryImpl",null);

Ибо TransformerFactoryImplвещи кажутся более сложными. Значение по умолчанию указывает на собственный класс Java com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl, для которого я не смог найти эквивалент, включенный в Xerces-for-Android. Поэтому, если я не хочу пытаться извлечь и переупаковать Java- TransformerFactoryImplкласс и все остальные родные классы, на что это опирается, я застрял здесь.

Итак, на данный момент я вижу следующие варианты решения:

  • либо отказаться от всей проверки схемы и придерживаться реализации Android (для которой рабочая версия TransformerFactoryImplсуществует, но которая имеет другие недостатки, например, нет DOMImplementationLSдля сериализации ),
  • или, если валидация важна, по-прежнему используйте реализацию Android практически для всех, просто используйте Xerces-for-Android для самостоятельного шага проверки,
  • или использовать Xerces-for-Android практически для всех, кроме преобразования XSL. Для этого мне, кажется, нужно сначала вывести Xerces DOM в файлы stream / cache, а затем применить преобразование с помощью Android Transformer, а затем проанализировать поток результатов обратно в представление DOM Xerces.

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

андроид, XSLT, XML-синтаксический, XSD-валидации, DomParser,
Похожие вопросы