Ищу парсер XML [закрыто]

Мне было поручено найти XML-анализатор DOM с открытым исходным кодом. Парсер должен минимально поддерживать XPath 1.0. Поддержка схемы желательна, но не прерыватель сделки

Файлы, которые мы анализируем, будут небольшими, поэтому скорость и потребление памяти не представляют большой проблемы.

Любой ОО язык (C ++, C #, Java и т. Д.).

Чтобы уточнить, план состоит в том, чтобы интегрировать синтаксический анализатор XML в приложение, гораздо более прочное, чем это можно сделать с помощью внешнего анализатора. Мы создаем адаптивную объектную модель на основе XML (измените XML, измените объектную модель.) Для этого нам нужно интегрировать синтаксический анализатор на довольно низком уровне. Это приводит к уровню элегантности, который необходимо испытать, чтобы понять (спасибо мистер Йодер). Часть этой элегантности исчезает, если у нас нет возможности перемещаться по этой объектной модели через XPath.

Мы создали прототип, который использует парсер операционной системы. Он работал довольно хорошо, но страдает от сложности и проблем с производительностью. Но эй, это был прототип. Теперь я хочу сделать что-то реальное, и я могу написать парсер с нуля. (Я выполнил эту часть, и это было довольно легко.) Теперь движок XPath - это отдельная история. Я почти уверен, что не сделаю этого в выходные.

15.12.2008 20:58:33
вопрос не имеет большого смысла: C #, Java и я полагаю, что C ++ имеет синтаксический анализ XML, доступный на уровне языка - что вы пытаетесь сделать?
annakata 15.12.2008 21:03:39
Итак, вы действительно хотите, чтобы синтаксический анализатор с открытым исходным кодом, поддерживающий XPath, использовал со своим собственным синтаксическим анализатором - что - и скопировал часть XPATH? Вы просто делаете это таким образом из личного интереса и любопытства? Возможно, экзотическая ОС?
dkretz 16.12.2008 00:11:52
Я исследую адаптивные объектные модели (используя метаданные для управления топологией объектной модели). Как я уже сказал, прототип на самом деле работает довольно хорошо, но я знаю, что могу намного лучше справиться со своим собственным анализатором.
Michael J 16.12.2008 14:06:19
Требуется ли совместимость с DOM?
vtd-xml-author 20.05.2010 05:50:53
Да, нам требуется совместимость с DOM. Я не закончил исследовать это, но у меня есть решение, которое работает на данный момент. Я написал свой собственный DOM, как парсер. Я использую System.Xml.XmlTextReader для фактического анализа. Объектная модель для моей реализации - это облегченная версия объектной модели System.Xml.XmlDocument. Он предоставляет мне необходимые мне функции (интерфейс DOM Level 1 Core и поддержку XPath), но имеет гораздо меньше накладных расходов.
Michael J 28.05.2010 15:22:20
5 ОТВЕТОВ
РЕШЕНИЕ

Всегда превосходный Джаксен может быть полезен для вас здесь. Это реализация Java XPath, используемая как для JDom, так и для Dom4J.

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

Из FAQ :

Как мне поддержать другую объектную модель?

Требуется только реализация интерфейса org.jaxen.Navigator. Не весь интерфейс требуется, и также предоставляется реализация по умолчанию в форме org.jaxen.DefaultNavigator.

Поскольку многие из осей XPath могут быть определены в терминах друг друга (например, ось предка является просто рекурсивно примененным родителем), для начала работы требуется только несколько итераторов оси низкого уровня. Конечно, вы можете реализовать их напрямую, вместо того, чтобы полагаться на способность композиции Джексена.

Я нашел написание этих относительно быстро.

1
16.12.2008 14:15:12
Jamesh, у меня было всего несколько часов, чтобы осмотреть Jaxen, но я хотел сообщить, что это выглядит очень многообещающе. Большое спасибо за предложение.
Michael J 23.12.2008 21:27:02

Чтобы ответить на этот вопрос хорошо, я думаю, что вам нужно предоставить немного больше контекста. Сказав это, я обнаружил, что новая объектная модель (XElement и т. Д.) Для Xml в .NET 3.5, поддерживающая Linq to XML, значительно упрощает навигацию по XML, и я действительно имею в виду порядок, проще и лучше, чем использование DOM

0
15.12.2008 21:09:38
У меня есть устаревшее приложение, в котором мы склеили код, чтобы выразить его внутреннее состояние в виде XML (похоже на анализатор DOM). Теперь я хочу перемещаться по этой "DOM" через XPath. Выразить внутреннее состояние как XML DOM было легко. Я обнаружил, что не так просто написать парсер XPath для навигации по этому DOM.
Michael J 15.12.2008 22:32:14
Linq заинтриговал меня, но я не могу понять, что это может значить, если использовать его для навигации и объектной модели.
Michael J 16.12.2008 14:08:49

Если вы разрешаете C #, разве у вас не будет стандартных библиотек C #? Они несовершенны?

То же самое для Java? И все это началось в C ++. Я не понимаю недостаток.

Поиск в Google для «XML-парсера XPATH» находит множество совпадений для CPAN, JDOM и J2SE, какао, MSXML и т. Д.

Вы только начинаете поиск здесь, или стандартных ответов недостаточно?

РЕДАКТИРОВАТЬ:

Ваши разъяснения подсказывают мне, что вы не хотите его использовать, вы хотите использовать исходный код для запуска собственного модуля XPATH в вашем собственном анализаторе XML? Это верно? И вас не волнует язык, потому что все, что вам нужно, это дизайн, а не код?

0
16.12.2008 00:13:34
Ты прав. Я некоторое время искал подходящий пример реализации XPath. Я сам напишу, если понадобится, но хороший пример никогда не повредит. Сотрудник предложил мне разместить здесь.
Michael J 16.12.2008 13:58:50

Если вам нужна только логика проектирования, а не код, вы можете изучить библиотеку REXML в Ruby. Это ОО и довольно хорошо и имеет полную поддержку XPath.

МРТ имеет реализацию на C и Ruby. JRuby имеет реализацию на Java.

0
16.12.2008 20:07:46

Возможно, это длинный путь, но jQuery, очевидно, поддерживает синтаксис XPath для ссылки на DOM; и я думаю, что его исходный код доступен.

0
17.12.2008 05:33:25