我正在寻找一个好的 JavaScript 库来解析 XML 数据。它应该比与浏览器捆绑在一起的内置XML DOM 解析器更容易使用。
我在使用 JSON 时有点被宠坏了,我期待在类似的 XML 行上有所作为。
我正在寻找一个好的 JavaScript 库来解析 XML 数据。它应该比与浏览器捆绑在一起的内置XML DOM 解析器更容易使用。
我在使用 JSON 时有点被宠坏了,我期待在类似的 XML 行上有所作为。
免责声明:如果可能适合该任务的开源Jsonix库,我是作者。
几年前,我还在为 JavaScript 寻找一个好的 XML<->JSON 解析/序列化库。我需要处理符合相当复杂的 XML 模式的 XML 文档。在 Java 中,我经常使用JAXB来完成任务,所以我一直在寻找类似的东西:
我当时没能找到这样的工具。
所以我编写了Jsonix,我认为它是 JavaScript 的 JAXB 模拟。
如果您对以下功能感兴趣,您可能会发现Jsonix 很合适:
QName
)。amdefine
Node.js 中)但是,如果您的 XML 相当简单、没有 XML Schema 或者您对严格的类型或结构不感兴趣,那么Jsonix可能是一种过度杀伤力。检查您的要求。
例子
在 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 是好的、适用的或被社区推荐的。不要被高票误导。
我为此使用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
编辑:由于我的主要示例的博客消失了,我想添加另一个示例来显示基础知识并帮助解决命名空间问题:
如果您的 XML 是简单格式,您可以查看jQuery和XML 到 JSON 插件或xmlObjectifier。
对于直接解析器,您可能需要查看XML 的 <SCRIPT>。
您是否为 SCRIPT 尝试过 XML。我不得不承认,我从未亲自使用过它,但我听说过/读过一些关于它的好东西。
试一试,也许在这里分享您的经验?