【发布时间】:2020-09-04 10:01:46
【问题描述】:
我有一个来自 API 调用的 XML 响应,并且想知道获取属性值(如 serv:result 和 use:sessionTicket 或 node.js 中的任何其他叶元素)的最佳且最简单的方法,因为我是新手这些技术不确定如何为带有命名空间的嵌套 XML 编写 xpath。 XML 如下所示。
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:com="http://www.webex.com/schemas/2002/06/common" xmlns:use="http://www.webex.com/schemas/2002/06/service/user">
<serv:header>
<serv:response>
<serv:result>SUCCESS</serv:result>
<serv:gsbStatus>PRIMARY</serv:gsbStatus>
</serv:response>
</serv:header>
<serv:body>
<serv:bodyContent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="use:authenticateUserResponse">
<use:sessionTicket>AAABdFRR6SEAABUYA0gAKEgyU0sAAAAE9w==</use:sessionTicket>
<use:createTime>1599142488352</use:createTime>
<use:timeToLive>5400</use:timeToLive>
</serv:bodyContent>
</serv:body>
</serv:message>
我正在使用 node v12.18.3 和 express 4.16.1。还安装了 npm 模块 xml2js@0.4.23、xml2json@0.12.0、xml-stream@0.4.5
我做了很多示例,但无法获得子节点属性。当我完成 xpath 时,我得到了未定义 - 我在下面附上了我的代码和结果输出。
var express = require('express');
var fs = require('fs');
var xml2js = require('xml2js');
var parser = new xml2js.Parser();
var app = express();
app.get('/', function(request, response) {
fs.readFile( './auth_xml.xml', "utf-8", function(err, data) {
if (err) {
return console.log('error:' + err.message);
}
response.send('The File has been read');
parser.parseString(data, function (err, result) {
console.log('xmlns: = ' + result['serv:message']['$']['xmlns:serv']);
console.log('serv:header = ' + result['serv:message']['serv:header']);
console.log('serv:response = ' + result['serv:message']['serv:header']['serv:response']);
});
});
});
app.listen(3000);
控制台的输出是
xmlns: = http://www.webex.com/schemas/2002/06/service
serv:header = [object Object]
serv:response = undefined
关于如何到达子节点 serv:result 的任何指针
【问题讨论】:
-
"请各位专家指导我完成此过程。" = "请您为我编写代码。"不是它是如何工作的。有大量关于如何用地球上几乎任何语言处理 XML(命名空间或无命名空间)的示例,包括 JS/node。从看起来很有希望的地方开始,尝试一下,如果你的代码遇到问题,你可以在这里发布。要求人们简单地为您编写代码不是本网站的想法。
-
感谢 Tomalak 的反馈 - 我已经做了很多示例,但无法访问子节点 - 我在下面附上了我的代码和结果输出
-
我已经更新了我的问题以反映我的代码和输出
-
这样好多了。你试过
console.log(result)看看它是什么样子的吗?它是一个普通的 JS 对象,你应该可以导航没有问题。 -
试过 console.log(result) 它给了我以下转储
{ 'serv:message': { '$': { 'xmlns:serv': 'http://www.webex.com/schemas/2002/06/service', 'xmlns:com': 'http://www.webex.com/schemas/2002/06/common', 'xmlns:use': 'http://www.webex.com/schemas/2002/06/service/user' }, 'serv:header': [ [Object] ], 'serv:body': [ [Object] ] } }
标签: node.js xml xpath namespaces