我试图使用模块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标记,那么这可能没什么用处.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。