2010-01-25 4 views
8

У меня есть XML-документ определенного формата, который я буду нажат. Этот документ всегда будет одного и того же типа, поэтому он очень строгий.Быстрый, легкий XML-анализатор

Мне нужно разобрать это, чтобы я мог преобразовать его в JSON (ну, слегка утомленная версия, чтобы кто-то другой мог использовать ее с DOJO).

Мой вопрос: должен ли я использовать очень быстрый легкий (без SAX и т. Д.) XML-анализатор (любые идеи?) Или написать свой собственный, в основном конвертируя в StringBuffer и вращаясь по массиву? В принципе, под обложками я предполагаю, что все синтаксические анализаторы HTML будут вращаться через строку (или буфер памяти) и анализировать, производя вывод по пути.

Благодаря

редактировать

XML-будет находиться в диапазоне от 3/4 линий до 50 макс (в крайнем случае) ..

+0

[AJAX или AJAJ?] (Http://izlooite.blogspot.com/2010/05/ajax-or-ajax-xml-vs-json.html) –

+0

попробуйте vtd-xml, и вы не пожалеете об этом .. –

+0

Возможный дубликат [Маленькая, минималистическая и быстрая библиотека XML для Java?] (Http://stackoverflow.com/questions/9430392/small-minimalistic-and-fast-xml-library-for-java) –

ответ

10

Нет, вы не должны пытаться написать собственный XML-парсер для этого.

SAX сам очень легкий и быстрый, поэтому я не уверен, почему думаю, что это слишком много. Также использование строкового буфера фактически будет гораздо менее масштабируемым, а затем с использованием SAX, поскольку SAX не требует загрузки всего XML-файла в память для его использования. Я использовал SAX для синтаксического анализа многомигабитных XML-файлов, которые вы не сможете использовать с помощью строковых буферов на 32-битной машине.

Если у вас есть небольшие файлы, и вам не нужно беспокоиться о производительности, изучите использование DOM. Реализация Java может быть вид раздражает в использовании (Вы можете создать документ с помощью DocumentBuilder, который исходит от DocumentBuilderFactory)

Код для создания документа из файла выглядит следующим образом:

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new FileInputStream("file.xml")); 

(обратите внимание, что сохранение ссылки на ваш конструктор документов ускорит работу, если вам нужно проанализировать несколько файлов)

Затем вы используете функцию в org.w3c.dom.Document для чтения или манипулирования содержимым. Например, getElementsByTagName() возвращает все элементы с определенным именем тега.

+1

Я подозреваю, что «легкий», Джо означает «прост в использовании»; SAX 'callback-ориентированный API не самый удобный. –

+1

Я бы добавил, если бы мог. SAX - это наиболее эффективный способ чтения XML на Java. Вам будет трудно написать правильный правильный парсер XML. Я должен подумать, что нужно написать обратный вызов для создания JSON. Если есть небольшой перевод, то он может быть чрезвычайно крошечным. – PSpeed

+0

@Michael Borgwardt: Я думаю, что использование DOM было бы проще, чем написать собственный парсер :) –

1

вы можете использовать DOM4J/XStream для чтения XML в эквивалентный java-модальный, а затем использовать JSONLIB для преобразования в JSON.

+0

+ Dom4j имеет SAX-подобный API, но проще. –

0

Используйте настоящий синтаксический анализатор XML. Если вы этого не сделаете, вас, вероятно, укусят, когда что-то изменится. Документ может быть «очень строгим», но через два года что-то, вероятно, получит рефакторизацию, и оно изменит структуру, чтобы она анализировала одну и ту же структуру данных с помощью синтаксического анализатора XML и разбивала собственный синтаксический анализатор строк.

+0

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

+0

Таким образом, парсер не-действительно-JSON настроен на падение, но нет необходимости усугублять проблему, введя ту же проблему, используя не-XML-синтаксический анализатор. – Quentin

7

Это действительно зависит от типа XML, который вы обрабатываете. Я бы не стал писать собственный парсер, когда есть что-то уже там, чтобы выполнить эту работу за вас.

Выбор SAX/DOM действительно basde на то, что вы пытаетесь разобрать, убедиться в этом, как решить, на какой из них использовать:

http://geekexplains.blogspot.com/2009/04/sax-vs-dom-differences-between-dom-and.html

Даже если вы не используете SAX/DOM есть еще простые варианты доступны для вас, взгляните на Simple:)

http://simple.sourceforge.net/

Вы можете также рассмотреть вопрос о Stax.

+0

Спасибо, я посмотрю на простой – joe90

3

Возможно, вам стоит взглянуть на маленький XML-анализатор XML XXML 2, специально разработанный для ограниченных сред, для доступа, анализа и отображения XML-файлов для устройств с поддержкой Java 2 Micro Edition. Он хорошо работает и с Java SE/EE ;-). Поскольку он предназначен для микро-издания, он действительно легкий (небольшой размер) и IMHO очень прост в использовании (гораздо проще, чем SAX/DOM и т. Д.).

Из моего собственного опыта с kXML 2: Я использовал его для синтаксического анализа XML-файлов размером более 1 Гб - Википедия свалках, и я был очень доволен потребление/производительность памяти и т.д.

наконец ;-) - ссылка: http://kxml.sourceforge.net/kxml2/

+0

Спасибо. посмотрим на это :), поскольку в какой-то момент нам понадобится мобильная версия – joe90

0

Разбор на бэкэнде и разоблачение JSON, вероятно, правильный путь, так что у вас будут данные JSON общего назначения, которые вы можете легко интегрировать с другими источниками, но если у вас есть простое сообщение, и это единственное место вы думаете, что используете JSON, вы можете попытаться выполнить парсинг-клиент. Dojo имеет experimental client-side XML parser

-1

Нужно ли использовать XML?

Я обнаружил, что мой собственный пользовательский текстовый формат был намного быстрее, чем XML или JSON с любым из пакетов с полками - они были быстрыми, но, контролируя мой собственный формат и просто делая синтаксический анализ строк, я смог разрезать время в два раза против самой быстрой реализации XML.

Очевидно, что это работает только в том случае, если вы полностью отвечаете за форматы и, возможно, не соответствуете вашей ситуации, но для других в этой ситуации: не думайте, что XML - это самый быстрый вариант, который у вас есть. Это не.

1

Вам действительно нужно разобрать/обработать любую из данных в документе XML? Если нет, вы можете просто создать XSLT. На самом деле просто, очень быстро.

+0

XSLT был разработан для преобразования XML, поэтому использовать его для преобразования в JSON - хорошая идея. –

Смежные вопросы