In an integration project , in some situation , the sending system will send out a big xml message like SOAP , but the receiving system only need a few fields from the big message. This requirement can be realized by CPI MAPPING . But is it possible by build a REST API in receiver side to realize the same function? Today I want to do a little test about this by using node.js . This is only for studying purpose . I will not answer project solution questions . Thanks for understanding !
The following is the xml source message which will be used in postman later also :
<title>Empire Burlesque
</title>
<artist>Bob Dylan
</artist>
<company>Columbia
</company>
<title>Hide your heart
</title>
<artist>Bonnie Tyler
</artist>
<company>CBS Records
</company>
<title>Greatest Hits
</title>
<artist>Dolly Parton
</artist>
<title>Still got the blues
</title>
<artist>Gary Moore
</artist>
<company>Virgin records
</company>
<artist>Eros Ramazzotti
</artist>
<title>One night only
</title>
<artist>Bee Gees
</artist>
<company>Polydor
</company>
<title>Sylvias Mother
</title>
<title>Maggie May
</title>
<artist>Rod Stewart
</artist>
<company>Pickwick
</company>
<artist>Andrea Bocelli
</artist>
<company>Polydor
</company>
<title>When a man loves a woman
</title>
<artist>Percy Sledge
</artist>
<company>Atlantic
</company>
<title>Black angel
</title>
<artist>Savage Rose
</artist>
<title>1999 Grammy Nominees
</title>
<company>Grammy
</company>
<title>For the good times
</title>
<artist>Kenny Rogers
</artist>
<company>Mucik Master
</company>
<title>Big Willie style
</title>
<artist>Will Smith
</artist>
<company>Columbia
</company>
<title>Tupelo Honey
</title>
<artist>Van Morrison
</artist>
<company>Polydor
</company>
<title>Soulsville
</title>
<artist>Jorn Hoel
</artist>
<country>Norway
</country>
<title>The very best of
</title>
<artist>Cat Stevens
</artist>
<company>Island
</company>
<artist>Sam Brown
</artist>
<company>A and M
</company>
<title>Bridge of Spies
</title>
<title>Private Dancer
</title>
<artist>Tina Turner
</artist>
<company>Capitol
</company>
<title>Midt om natten
</title>
<artist>Kim Larsen
</artist>
<company>Medley
</company>
<title>Pavarotti Gala Concert
</title>
<artist>Luciano Pavarotti
</artist>
<title>The dock of the bay
</title>
<artist>Otis Redding
</artist>
<company>Atlantic
</company>
<title>Picture book
</title>
<artist>Simply Red
</artist>
<company>Elektra
</company>
<artist>The Communards
</artist>
<company>London
</company>
<title>Unchain my heart
</title>
<artist>Joe Cocker
</artist>
The following is the XSLT file to do the extract :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
<h2>My CD Collection
</h2>
<td><xsl:value-of select=
"catalog/cd/title"/></td>
<td><xsl:value-of select=
"catalog/cd/artist"/></td>
The following result by extract with XSLT :
<html><body><h2>My CD Collection</h2><table border="1"><tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr><tr><td>Empire Burlesque</td><td>Bob Dylan</td></tr></table></body></html>
The following is the node.js code in file server.js :
var express = require('express');
var xslt = require('xslt-processor');
app.post('/addUser1',function(req,res){
if (req.url === '/addUser1' && req.method === 'POST'){
var data = '';
req.on('data', function (chunk) {
// chunk 默认是一个二进制数据,和 data 拼接会自动 toString
data += chunk;
fs.readFile( `${__dirname}/xsltdemo.xslt`, 'utf8' ,function(err,data1){
const outXmlString = xslt.xsltProcess(
xslt.xmlParse(data),
xslt.xmlParse(data1)
);
console.log(outXmlString);
res.end(outXmlString);
});
});
}
})
var server = app.listen(8081, function () {
var host =
server.
address().
address
var port =
server.
address().
port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
The following is the test result with postman :
Best regards!
Jacky Liu