Pergunta

Eu estou procurando uma boa biblioteca JavaScript para análise de dados XML. Ele deve ser muito mais fácil de usar do que o built-in XML DOM analisadores junto com o browsers.

I got muito bem tratados um pouco a trabalhar com JSON e estou ansioso para algo em linhas semelhantes para XML.

Foi útil?

Solução

Eu uso jQuery para isso. Aqui está um bom exemplo:

(EDIT:. Nota - o seguinte blogue parece ter ido embora)

http://blog.reindel.com/ 2007/09/24 / jquery-e-xml revisitado /

Há também muitos e muitos bons exemplos no jQuery documentação:

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

EDIT: Devido ao blog para o meu principal exemplo indo embora, eu queria adicionar outro exemplo que mostra os conceitos básicos e ajuda com questões de espaço de nomes:

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

Outras dicas

Disclaimer: Eu sou o autor se o código-fonte aberto Jsonix biblioteca que pode ser adequado para a tarefa.


Um par de anos atrás eu também estava à procura de um bom XML <-> JSON biblioteca de análise / serialização para JavaScript. Eu precisava documentos XML processo em conformidade com XML bastante complexo esquemas. Em Java, eu rotineiramente usar JAXB para a tarefa, então eu estava procurando algo semelhante:

Existe uma JavaScript API para XML vinculativo -? analógico para JAXB para Java

Eu não conseguiram encontrar uma ferramenta naquela época.

Então eu escrevi Jsonix que eu considero ser um análogo JAXB para JavaScript.

Você pode encontrar Jsonix adequado, se você estiver interessado nos seguintes recursos:

  • XML <-> conversão JSON é baseado em um declaraive mapeamento entre XML e JSON estruturas
  • Este mapeamento pode ser gerado a partir de um XML Schema ou escritas manualmente
  • bidirecional -. Suportes de análise, bem como serialização (ou unmarshalling / triagem em outros termos)
  • Suporte elementos , atributos e também considera namespaces definido no documento XML.
  • Strictly digitado.
  • Strictly estruturado.
  • Suporte quase todo o XML Schema tipos built-in (incluindo tipos especiais como QName).
  • Obras em navegadores , bem como Node.js , também compatível com RequireJS / AMD (também para amdefine em Node.js)
  • extensa documentação .

No entanto, Jsonix pode ser um exagero , se o XML é bastante simples, não tem um esquema XML ou se você não está interessado em digitação ou estruturas rígidas. Verifique os seus requisitos.

Exemplo

Experimente em jsFiddle .

Você pode tomar um ordem de compra esquema e gerar uma mapeamento para ele usando o seguinte comando:

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

Você obterá um arquivo PO.js que descreve mapeamentos entre XML e as estruturas de JavaScript. Aqui está um trecho a partir deste arquivo de mapeamento para dar-lhe uma impressão:

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'
    }, ... ]
};

Tendo este arquivo de mapeamento você pode analisar o 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);
    });

Ou serializar seu objeto JavaScript como 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: { /* ... */ }
    }
});

Você pode experimentá-lo em jsFiddle para ver como ele funciona na prática.


AVISO LEGAL adicionais: esta resposta é high-votou por causa do seguinte discussão na meta. Então, por favor estar ciente da "meta-efeito". High vota aqui não significam necessariamente que Jsonix é bom, applicable ou recomendados pela comunidade. Não ser enganados pelos altos votos.

Se o seu XML está em um formato simples que você pode olhar para jQuery e XML para JSON Plugin ou o xmlObjectifier .

Para um analisador em linha reta você pode querer olhar em XML para

scroll top