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

我对 JSON 的使用有点被宠坏了,并且期待 XML 中类似的东西。

有帮助吗?

解决方案

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

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

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

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

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

编辑:由于我的主要示例的博客已消失,我想添加另一个示例来显示基础知识并帮助解决命名空间问题:

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

其他提示

免责声明: 如果开源的话我是作者 杰森尼克斯 图书馆哪个 可能 适合该任务。


几年前,我也在寻找一个好的 JavaScript XML<->JSON 解析/序列化库。我需要处理符合相当复杂的 XML 模式的 XML 文档。在Java中,我经常使用 联合航空航天局 对于这项任务,所以我一直在寻找类似的东西:

是否有用于 XML 绑定的 JavaScript API - 类似于 Java 的 JAXB?

当时我没找到这样的工具。

所以我写了 杰森尼克斯 我认为它是 JavaScript 的 JAXB 模拟。

你可能会发现 杰森尼克斯 适合,如果您对以下功能感兴趣:

  • XML<->JSON 转换基于 声明式映射 XML 和 JSON 结构之间
  • 映射从 XML 模式生成 或手工编写
  • 双向 - 支持解析和序列化(或其他术语中的解组/编组)。
  • 支持 元素, 属性 并且还考虑到 命名空间 XML 文档中定义。
  • 严格打字。
  • 结构严谨。
  • 支持几乎所有的 XML 架构内置类型 (包括特殊类型,如 QName).
  • 工作于 浏览器Node.js, ,也兼容 要求JS/AMD (也到 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 好、适用或被社区推荐。不要被高票数误导。

如果您的 XML 是简单格式,您可以查看 jQueryXML 到 JSON 插件 或者 xml对象化器.

对于直接解析器,您可能想看看 <脚本> 的 XML.

你有没有尝试过 用于脚本的 XML. 。我必须承认,我个人从未使用过它,但我听说/读过一些关于它的好东西。

尝试一下,也许可以在这里分享您的经验?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top