UNPKG

ws-support

Version:

A web service transformation support tool

55 lines (51 loc) 1.6 kB
const xml2js = require('xml2js') function parseXML (xml) { return new Promise((resolve, reject) => { const parser = new xml2js.Parser() parser.parseStringPromise(xml).then((result) => { const keys = ['soap:Envelope', 'soap:Body'] const arrayKeys = ['result'] const keysResult = getKeysResult(result, keys) const arrayKeysResult = getKeysResult(keysResult, arrayKeys, 0) let data = Buffer.from(decodeURIComponent(arrayKeysResult || ''), 'base64').toString('utf8') data = data ? JSON.parse(data) : '' resolve(data) }).catch((err) => { console.error(err) reject(err) }) }) } function getKeysResult (obj, keys, index = -1) { let result = obj keys.forEach((key) => { result = index === -1 ? result[key] : result[index][key] }) return index === -1 ? result : result[index] } function handleDTDString (xmlData, isGetPreviewContent) { const startString = '<!DOCTYPE' const endString = '</html>' const startIndex = xmlData.indexOf(startString) const endIndex = xmlData.indexOf(endString) const textContent = xmlData.slice(startIndex, endIndex + endString.length) let resultXmlData if (isGetPreviewContent) { resultXmlData = '' } else { const startArray = xmlData.split(startString) const startContent = startArray[0] const handleContent = startArray[1] const endArray = handleContent.split(endString) const endContent = endArray[1] resultXmlData = startContent + endContent } return { resultXmlData, textContent } } export default { parseXML, handleDTDString }