从soap xml响应中提取令牌

Posted

技术标签:

【中文标题】从soap xml响应中提取令牌【英文标题】:extract token from soap xml response 【发布时间】:2021-12-10 01:38:45 【问题描述】:

我正在尝试从 SOAP xml 响应中提取令牌。我尝试了各种 sn-ps 并提出了以下建议:

var xml2js = require('xml2js');
var parser = new xml2js.Parser();


var options = 
  "method": "POST",
  "hostname": "www.titlepage.com",
  "port": null,
  "path": "/ws/TitleQuery.php",
  "headers": 
    "content-type": "text/xml",
    "cache-control": "no-cache",
    
  
;

  


var req = http.request(options, function (res) 
  var chunks = [];

  res.on("data", function (chunk) 
    chunks.push(chunk);
  );

  res.on("end", function () 
    var body = Buffer.concat(chunks);
    const xml = (body.toString());
    
    

    parser.parseString(xml, function (err, result) 
      if (err) 
          console.error('here is the eror: ', err);
       else 
          jsonLog = (JSON.stringify(result, null, 2));
          console.log(result['SOAP-ENV:Envelope']['SOAP-ENV:Body'][0]['ns1:LoginResponse'][0]['Token']['0']); 
      
  );

  );
);

req.write("<?xml version=\"1.0\"?>\n<soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">\n  <soap:Body xmlns:m=\"http://www.titlepage.com/ws\">\n    <m:Login>\n      <m:UserName>a105yn</m:UserName>\n      <m:Password>pink6PUPT1yult*kul</m:Password>\n    </m:Login>\n  </soap:Body>\n</soap:Envelope>");
req.end();

结果是:

  
    _: '312cb0ee6c346ee266dc95bc6c688021',
    '$':  'xsi:type': 'xsd:string' 
  
]

如何进行最后一步并访问令牌(_ 键)的值,以及 _ 键是什么?

【问题讨论】:

你能分享一个 XML 的样例吗? &lt;?xml version="1.0"?&gt; &lt;soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"&gt; &lt;soap:Body xmlns:m="http://www.titlepage.com/ws"&gt; &lt;m:Login&gt; &lt;m:UserName&gt;Username goes here&lt;/m:UserName&gt; &lt;m:Password&gt;Password goes here&lt;/m:Password&gt; &lt;/m:Login&gt; &lt;/soap:Body&gt; &lt;/soap:Envelope&gt; 如果我错了,请纠正我,但您似乎想提取例如 m:username & m:password 的值?如果是这种情况,下面的代码/答案会这样做,否则您可以进一步解释,我会尝试进一步提供帮助。 【参考方案1】:

你可以试试这个。

var convert = require('xml-js');

var xml = `<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    <soap:Body xmlns:m="http://www.titlepage.com/ws">
        <m:Login>
            <m:UserName>Username goes here</m:UserName>
            <m:Password>Password goes here</m:Password>
        </m:Login>
    </soap:Body>
</soap:Envelope>`

var options = compact: true, spaces: 4, elementNameFn: function(val) return val.replace('soap:','');;
var result = convert.xml2json(xml,options);


console.log(result);


var extract = JSON.parse(result)
console.log(extract.Envelope.Body['m:Login']['m:UserName']["_text"]) //Prints "Username goes here"
console.log(extract.Envelope.Body['m:Login']['m:Password']["_text"]) //Prints "Password goes here"

【讨论】:

以上是关于从soap xml响应中提取令牌的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE PL SQL 从 SOAP XML 中提取值

从VBA中的节点提取XML数据

如何在php中解析soap xml响应并从字符串中获取信息

从响应 url 中提取令牌 - Spotify API

如何使用目标 c 从 xml 信封中提取 xml 肥皂体?

从肥皂响应中提取价值