我是node.js
的新手,需要解析XML
。在js中,我只使用DOMParser
并使用getElementsByTagName
来获取我想要的值。我刚刚切换到节点并使用xml2js
(愿意考虑替代方案)。我无法弄清楚如何解析响应以获得我正在寻找的东西。
以下代码:
function parseBody(body){
var parseString = require('xml2js').parseString;
var xml = body
parseString(xml, function (err, result) {
console.dir(result);
});
这是我传递给函数的XML:
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:int=\"realURLHere">
<soapenv:Header/>
<soapenv:Body>
<int:readResponse>
<response>
<request>?</request>
<cust>
<fName>?</fName>
</cust>
</response>
</int:readResponse>
</soapenv:Body>
</soapenv:Envelope>
这是我的功能的输出:
{ 'soapenv:Envelope':
{ '$':
{ 'xmlns:soapenv': 'http://schemas.xmlsoap.org/soap/envelope/',
'xmlns:int': 'realURLHere' },
'soapenv:Body': [ [Object] ]
}
}
我试图在<fName>
内访问<cust>
的值,但没有运气。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
var custFName = result['soapenv:Envelope']['soapenv:Body'][0]['int:realURLHere'][0]['response'][0]['cust'][0]['fName'];
这解决了我的问题。我的挣扎与这个响应有关,所有内容都在数组中。如果有更简单的方法可以做到这一点或更有活力,请告诉我。但就目前而言,这很有效。
答案 1 :(得分:1)
如果将xplicitArray选项设置为false,则在解析时将不会在您不期望的位置创建那些数组。像这样:
Sub ReturnsProduct()
Dim StartNumber As Single
Dim i As Integer
i = Worksheets("Annual Growth").Range("I7")
Dim cell
cell = Worksheets("Annual Growth").Range("C12", "C100")
For cell = 1 To i
WorksheetFunction.Product (Worksheets("Annual Growth").Range("E12"))
Next
Worksheets("Annual Growth").Range("G9").Value = Result
End Sub
此外,如果删除前缀,它甚至可以变得更加干净:
function parseBody(body) {
var parseString = require('xml2js').parseString;
const options = {
explicitArray: false
};
var xml = body
parseString(xml, options, function (err, result) {
console.log("cust fname: " + result['soapenv:Envelope']['soapenv:Body']['int:readResponse']['response']['cust']['fName']);
})
}
var input = '<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:int=\"realURLHere"><soapenv:Header/><soapenv:Body><int:readResponse><response><request>?</request><cust><fName>?</fName></cust></response></int:readResponse></soapenv:Body></soapenv:Envelope>';
parseBody(input);
答案 2 :(得分:0)
试试这个
{
"fname": "hello world"
}
打印出来
result.fname
您可以使用use Symfony\Component\HttpFoundation\Response;
$response = new Response();
$response->headers->set('Content-Type', 'text/json');
$response->send();
答案 3 :(得分:0)
如果您使用的是NodeJS,我强烈推荐xml2js和xml2js-xpath。这是他们的示例代码,确实对我有帮助。
var xml2js = require("xml2js");
var xpath = require("xml2js-xpath");
xml2js.parseString('<root><element id="15">target</element></root>', function(err, json) {
// find all elements: returns xml2js JSON of the element
var matches = xpath.find(json, "//element");
// find the first element, and get its id:
var matches = xpath.evalFirst(json, "//element", "id");
});