JavaScript的XML解析器

JavaScript的XML解析器

XML parser for JavaScript

我正在寻找一个很好的JavaScript库来解析XML数据。 它应该比与浏览器捆绑在一起的内置XML DOM解析器容易使用。

我对使用JSON有点兴趣,并期待在XML的类似方面有所发展。


免责声明:如果开源Jsonix库可能适合该任务,我就是作者。

几年前,我还在寻找JavaScript的良好XML <-> JSON解析/序列化库。我需要处理符合相当复杂的XML模式的XML文档。在Java中,我通常使用JAXB来完成任务,因此我正在寻找类似的东西:

Is there a JavaScript API for XML binding - analog to JAXB for Java?

那时我找不到这样的工具。

所以我写了Jsonix,我认为它是JavaScript的JAXB模拟。

如果您对以下功能感兴趣,您可能会发现Jsonix是合适的:

  • XML <-> JSON转换基于XML和JSON结构之间的声明性映射
  • 可以从XML模式生成此映射,也可以手动编写
  • 双向-支持解析和序列化(或用其他术语解组/编组)。
  • 支持元素,属性,还考虑XML文档中定义的名称空间。
  • 严格输入。
  • 严格的结构。
  • 支持几乎所有的XML Schema内置类型(包括特殊类型,如QName)。
  • 在浏览器以及Node.js中均可使用,也与RequireJS / AMD兼容(也与Node.js中的amdefine兼容)
  • 有大量的文档。

但是,如果您的XML很简单,没有XML Schema或您对严格的类型或结构不感兴趣,那么Jsonix可能是一个过大的选择。检查您的要求。

在JSFiddle中尝试一下。

您可以使用以下命令获取采购订单模式并为其生成映射:

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

您将获得一个PO.js文件,该文件描述了XML和JavaScript结构之间的映射。这是此映射文件中的一个片段,给您印象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 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中尝试它,以查看它在实践中如何工作。

附加免责声明:由于以下有关meta的讨论,因此该答案具有很高的投票权。因此,请注意"元效应"。这里的高票不一定表示Jsonix是良好的,适用于社区的或由社区推荐的。不要被高票误导。


我为此使用jQuery。这是一个很好的例子:

(编辑:注意-以下博客似乎已消失。)

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

jQuery文档中还有很多很好的例子:

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

编辑:由于我的主要示例的博客消失了,我想添加另一个示例,该示例显示了基本知识并有助于解决名称空间问题:

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


如果您的XML是简单格式,则可以查看jQuery和XML to JSON插件或xmlObjectifier。

对于直接解析器,您可能需要查看XML。


您是否尝试过将XML用于SCRIPT。我不得不承认,我从未亲自使用过它,但是我已经听说过/阅读了一些有关它的好东西。

试试看,也许在这里分享您的经验?


推荐阅读

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux下载数据命令?

    linux下载数据命令?,软件,工具,数据,系统,代理,官网,网络,名称,网址,盘中,在l

    做数据linux常用命令?

    做数据linux常用命令?,工作,系统,基础,网络,数据,标准,管理,工具,地址,命令,l

    linux查重复数据命令?

    linux查重复数据命令?,工具,数据,系统,电脑,名字,资料,代码,百度,标准,技术,

    linux数据库升级命令?

    linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,l

    数据库导出linux命令?

    数据库导出linux命令?,密码,数据,数据库,情况,地址,系统,工具,网上,名字,命

    linux下命令行浏览器?

    linux下命令行浏览器?,地址,传播,工具,网站,软件,发行,网址,首次,官网,系统,l

    linux命令与数据流?

    linux命令与数据流?,工作,地址,系统,信息,命令,目录,标准,网络,管理,常用命

    linux恢复数据库命令?

    linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux安装浏览器命令?

    linux安装浏览器命令?,官网,系统,平台,网站,管理,设备,咨询,工具,官方网站,

    linux存储数据命令?

    linux存储数据命令?,系统,管理,数据,设备,情况,地址,工作,命令,服务,平台,Lin

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D