JavaScript的XML解析器[关闭]

Posted

技术标签:

【中文标题】JavaScript的XML解析器[关闭]【英文标题】:XML parser for JavaScript [closed] 【发布时间】:2010-09-10 03:36:13 【问题描述】:

我正在寻找一个好的 javascript 库来解析 XML 数据。应该比浏览器自带的XML DOM parsers好用多了。

我在使用 JSON 时有点被宠坏了,我期待在类似的 XML 行上有所作为。

【问题讨论】:

【参考方案1】:

我为此使用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/

【讨论】:

reindel 链接被盗用了。 这是博客的镜像:web.archive.org/web/20080110113712/http://blog.reindel.com/2007/… 也许您可以将博客的打印输出作为 PDF 附件包含在答案中?我会去掉“编辑”注释,因为它们使文本不太清晰。我只是删除死链接并用活动链接替换它们 the meme 是从这里开始的吗?【参考方案2】:

你试过XML for SCRIPT。我必须承认,我从未亲自使用过它,但我听说过/读过一些关于它的好东西。

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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


几年前,我还在为 JavaScript 寻找一个好的 XMLJSON 解析/序列化库。我需要处理符合相当复杂的 XML 模式的 XML 文档。在 Java 中,我经常使用 JAXB 来完成任务,所以我正在寻找类似的东西:

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

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

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

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

XMLJSON 转换基于 XML 和 JSON 结构之间的声明式映射映射可以从 XML Schema 生成或手动编写 双向 - 支持解析和序列化(或其他术语的解组/编组)。 支持elementsattributes,还考虑了XML文档中定义的namespaces。 严格输入。 结构严谨。 支持几乎所有的XML Schema 内置类型(包括QName 等特殊类型)。 在浏览器Node.js中工作,也兼容RequireJS/AMD(也兼容Node.js中的amdefine)李> 有extensive documentation。

但是,如果您的 XML 相当简单,没有 XML Schema,或者您对严格的类型或结构不感兴趣,那么 Jsonix 可能有点过头了。检查您的要求。

示例

试试in JSFiddle。

您可以获取purchase order schema 并使用以下命令为其生成映射:

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

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

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:  /* ... */ 
    
);

您可以试试in JSFiddle,看看它在实践中是如何工作的。


附加免责声明:由于 meta 上的 following discussion,此答案的投票率很高。 所以请注意“元效应”。这里的高票并不一定意味着 Jsonix 很好、适用或被社区推荐。不要被高票误导。

【讨论】:

以上是关于JavaScript的XML解析器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用纯 JavaScript 编写的用于嵌入式环境的 XML 解析器 [关闭]

java中的xml dom解析器? [关闭]

Java 中是不是有比 Xalan/Xerces 更快的 XML 解析器 [关闭]

Java的Javascript解析器[关闭]

Python中的JavaScript解析器[关闭]

DOM、SAX 和 StAX XML 解析器之间有啥区别? [关闭]