Анализатор XML для JavaScript [закрыт]

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

Я немного избалован работой с JSON и с нетерпением жду чего-то похожего для XML.


person Gulzar Nazim    schedule 17.09.2008    source источник


Ответы (4)


Для этого я использую jQuery. Вот хороший пример:

(РЕДАКТИРОВАТЬ: Примечание. Следующий блог, похоже, исчез.)

http://blog.reindel.com/2007/09/24/jquery-and-xml-revisited/

В документации jQuery также есть множество хороших примеров:

http://www.webmonkey.com/tutorial/Easy_XML_Consumment_using_jQuery?oldid=20032

РЕДАКТИРОВАТЬ: Из-за того, что блог для моего основного примера уходит, я хотел добавить еще один пример, который показывает основы и помогает с проблемами пространства имен:

http://www.zachleat.com/web/selecting-xml-with-javascript/

person shadit    schedule 17.09.2008
comment
Ссылка на реиндел была похищена. - person DuckMaestro; 04.06.2011
comment
comment
Может быть, вы можете включить распечатку блога в виде приложения PDF к ответу? Я бы избавился от примечаний EDIT, потому что они делают текст менее четким. Я бы просто удалил мертвые ссылки и заменил их живыми ссылками. - person Jonathan Benn; 18.11.2014
comment
Здесь начался мем? - person Peter Mortensen; 18.11.2014

Отказ от ответственности: я являюсь автором библиотеки Jsonix с открытым исходным кодом, которая < em>может подойти для этой задачи.


Пару лет назад я также искал хорошую библиотеку разбора/сериализации XML‹->JSON для JavaScript. Мне нужно было обрабатывать документы XML, соответствующие довольно сложным схемам XML. В Java я обычно использую JAXB для задачи, поэтому я искал что-то подобное:

Есть ли API JavaScript для Привязка XML — аналог JAXB для Java?

Тогда я не нашел такого инструмента.

Поэтому я написал Jsonix, который считаю аналогом JAXB для JavaScript.

Вам может подойти Jsonix, если вас интересуют следующие функции:

  • Преобразование XML‹->JSON основано на декларативном сопоставлении между структурами XML и JSON.
  • Это сопоставление может быть сгенерировано из XML-схемы или написано вручную.
  • Двунаправленный — поддерживает синтаксический анализ, а также сериализацию (или, другими словами, десортировку/сортировку).
  • Поддерживать элементы, атрибуты, а также учитывать пространства имен, определенные в XML-документе.
  • Строго типизирован.
  • Строго структурировано.
  • Поддержка почти всех встроенных типов XML-схемы (включая специальные типы, такие как QName).
  • Работает в браузерах, а также в Node.js, также совместим с RequireJS/AMD< /a> (также для amdefine в Node.js)
  • Имеет обширную документацию.

Однако Jsonix может быть излишним, если ваш XML довольно прост, не имеет XML-схемы или если вас не интересует строгая типизация или структуры. Проверьте свои требования.

Пример

Попробуйте в JSFiddle.

Вы можете взять схему заказа на покупку и создать для нее сопоставление. используя следующую команду:

java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar
  -d mappings -p PO purchaseorder.xsd

Вы получите файл PO.js, в котором описаны сопоставления между структурами XML и JavaScript. Вот фрагмент из этого файла сопоставления, чтобы дать вам представление:

var PO = {
    name: 'PO',
    typeInfos: [{
        localName: 'PurchaseOrderType',
        propertyInfos: [{
            name: 'shipTo',
            typeInfo: 'PO.USAddress'
        }, {
            name: 'billTo',
            typeInfo: 'PO.USAddress'
        }, {
            name: 'comment'
        }, {
            name: 'orderDate',
            typeInfo: 'Calendar',
            type: 'attribute'
        }, ...]
    }, {
        localName: 'USAddress',
        propertyInfos: [ ... ]
    }, ...],
    elementInfos: [{
        elementName: 'purchaseOrder',
        typeInfo: 'PO.PurchaseOrderType'
    }, ... ]
};

Имея этот файл сопоставления, вы можете проанализировать XML:

// First we construct a Jsonix context - a factory for unmarshaller (parser)
// and marshaller (serializer)
var context = new Jsonix.Context([PO]);

// Then we create a unmarshaller
var unmarshaller = context.createUnmarshaller();

// Unmarshal an object from the XML retrieved from the URL
unmarshaller.unmarshalURL('po.xml',
    // This callback function will be provided
    // with the result of the unmarshalling
    function (unmarshalled) {
        // Alice Smith
        console.log(unmarshalled.value.shipTo.name);
        // Baby Monitor
        console.log(unmarshalled.value.items.item[1].productName);
    });

Или сериализуйте свой объект JavaScript как XML:

// Create a marshaller
var marshaller = context.createMarshaller();

// Marshal a JavaScript Object as XML (DOM Document)
var doc = marshaller.marshalDocument({
    name: {
        localPart: "purchaseOrder"
    },
    value: {
        orderDate: { year: 1999, month: 10, day: 20 },
        shipTo: {
            country: "US",
            name: "Alice Smith",
            street: "123 Maple Street",
            city: "Mill Valley",
            state: "CA",
            zip: 90952
        },
        billTo: { /* ... */ },
        comment: 'Hurry, my lawn is going wild!',
        items: { /* ... */ }
    }
});

Вы можете попробовать это в JSFiddle, чтобы увидеть, как это работает на практике.


Дополнительный отказ от ответственности: этот ответ получил большое количество голосов из-за после обсуждения метаданных. Имейте в виду «мета-эффект». Большое количество голосов здесь не обязательно означает, что Jsonix хорош, применим или рекомендован сообществом. Не вводите в заблуждение высокие голоса.

person lexicore    schedule 16.11.2014

Если ваш XML имеет простой формат, вы можете просмотреть jQuery и плагин XML to JSON или xmlObjectifier.

Для прямого анализатора вы можете посмотреть XML для ‹SCRIPT›.

person palehorse    schedule 17.09.2008

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

Попробуйте и, может быть, поделитесь своим опытом здесь?

person Mo.    schedule 17.09.2008