【发布时间】:2018-01-10 10:31:42
【问题描述】:
我收到的 SOAP 消息格式如下:
const soap = `
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header/>
<env:Body property="def">
<Root>
<Abc attr="abc">123456</Abc>
</Root>
</env:Body>
</env:Envelope>
`;
我期望得到的是<env:Body>的内容不变:
<Root>
<Abc attr="abc">123456</Abc>
</Root>
要提取正文,我使用简单的正则表达式:
function getSoapBody(xmlStr) {
let soapBody = null;
if (xmlStr) {
const soapBodyRegex = /<env:Body>([\s\S]*)<\/env:Body>/im;
const soapBodyRegexMatchResult = xmlStr.match(soapBodyRegex);
soapBody = soapBodyRegexMatchResult[1];
}
return soapBody;
}
但是,使用正则表达式获取 body 当然并不理想。
此外,我不想重新发明轮子,我正在寻找一种解决方案(甚至是 npm 包),无论使用什么前缀(如果前缀更改,上面的正则表达式将失败)或者是否存在,基本上都会 getSoapBody是可选属性等。
【问题讨论】:
-
你试过这个吗? npmjs.com/package/soap?
-
是的,我已经查看了这个包以及更多内容。然而,我真的不需要服务器。我会说我需要寻找 XML 解析器...仍在调查。
-
如果您从您的应用程序进行 SOAP 调用,那么它确实有客户端支持:npmjs.com/package/soap#client。如果您只是收到 SOAP 响应,那么您就在 XML 解析器上。
-
XML 解析器的问题在于解析所有内容,即肥皂信封和肥皂正文的内容。
标签: javascript node.js soap