XML to JSON – 在JavaScript中处理xml名称空间和别名

我试图使用模块xml2js将node.js中的 XML转换为 JSON.访问变量时如何处理命名空间别名?

以下代码转换我的文件(sampleWithNamespaces.xml)

var fs = require('fs'),xml2js = require('xml2js');

var parser = new xml2js.Parser();
fs.readFile('sampleWithNamespaces.xml',function (err,data) {
    parser.parseString(data,result) {
        console.dir(result);
        console.log('Done');
    });
});

sampleWithNamespaces.xml:

<d:student xmlns:d='http://www.develop.com/student'>
  <d:id>3235329</d:id>
  <d:name>Jeff Smith</d:name>
  <d:language>JavaScript</d:language>
  <d:rating>9.5</d:rating>
</d:student>

输出

$node xml2jsTest.js
{ '@': { 'xmlns:d': 'http://www.develop.com/student' },'d:id': '3235329','d:name': 'Jeff Smith','d:language': 'JavaScript','d:rating': '9.5' }
Done

如果我没有命名空间别名,我可以使用符号结果[‘d:name’]而不是result.name来访问’name’属性.我想我的问题是,我这样做是正确的吗?

我有read“如果一个元素有一个名称空间别名,别名和元素是使用”$“连接的.例如,ns:element变为ns $element”如果我这样做,我可以读取该属性作为结果.d $名称.如果我走这条路,我怎么会这样做?

我有一个类似的问题.我的大多数XML标签都在一个命名空间中.所以我决定从XML中删除所有命名空间.

通过向xml2js添加tagNameProcessors,可以在解析XML时去掉命名空间.

var parseString = require('xml2js').parseString;
var stripNS = require('xml2js').processors.stripPrefix;

parseString(xml_str,{ tagNameProcessors: [stripNS] },function(err,result) {});

这在技术上会忽略所有命名空间.如果您有来自多个名称间的XML标记,那么这可能没什么用处.

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念