Skip to Content
Product Information
Author's profile photo Jacky Liu

构建REST API 接收 XML 消息,并用 XSLT 抽取需要的内容

在做集成的过程中,会有一种情况,发送系统发送一个比较大的XML 消息,但是接受系统只需要少量的字段内容,这个在CPI里可以通过MAPPING 来实现。那自己写一个REST API 能不能实现这个功能呢 ? 下面做个小实验 。本实验只做探讨学习用,不做系统解决方案相关问题的回答,敬请谅解 。

源消息格式:用在POST MAN的消息体

<catalog>

<cd>

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>

<country>USA</country>

<company>Columbia</company>

<price>10.90</price>

<year>1985</year>

</cd>

<cd>

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>

<country>UK</country>

<company>CBS Records</company>

<price>9.90</price>

<year>1988</year>

</cd>

<cd>

<title>Greatest Hits</title>

<artist>Dolly Parton</artist>

<country>USA</country>

<company>RCA</company>

<price>9.90</price>

<year>1982</year>

</cd>

<cd>

<title>Still got the blues</title>

<artist>Gary Moore</artist>

<country>UK</country>

<company>Virgin records</company>

<price>10.20</price>

<year>1990</year>

</cd>

<cd>

<title>Eros</title>

<artist>Eros Ramazzotti</artist>

<country>EU</country>

<company>BMG</company>

<price>9.90</price>

<year>1997</year>

</cd>

<cd>

<title>One night only</title>

<artist>Bee Gees</artist>

<country>UK</country>

<company>Polydor</company>

<price>10.90</price>

<year>1998</year>

</cd>

<cd>

<title>Sylvias Mother</title>

<artist>Dr.Hook</artist>

<country>UK</country>

<company>CBS</company>

<price>8.10</price>

<year>1973</year>

</cd>

<cd>

<title>Maggie May</title>

<artist>Rod Stewart</artist>

<country>UK</country>

<company>Pickwick</company>

<price>8.50</price>

<year>1990</year>

</cd>

<cd>

<title>Romanza</title>

<artist>Andrea Bocelli</artist>

<country>EU</country>

<company>Polydor</company>

<price>10.80</price>

<year>1996</year>

</cd>

<cd>

<title>When a man loves a woman</title>

<artist>Percy Sledge</artist>

<country>USA</country>

<company>Atlantic</company>

<price>8.70</price>

<year>1987</year>

</cd>

<cd>

<title>Black angel</title>

<artist>Savage Rose</artist>

<country>EU</country>

<company>Mega</company>

<price>10.90</price>

<year>1995</year>

</cd>

<cd>

<title>1999 Grammy Nominees</title>

<artist>Many</artist>

<country>USA</country>

<company>Grammy</company>

<price>10.20</price>

<year>1999</year>

</cd>

<cd>

<title>For the good times</title>

<artist>Kenny Rogers</artist>

<country>UK</country>

<company>Mucik Master</company>

<price>8.70</price>

<year>1995</year>

</cd>

<cd>

<title>Big Willie style</title>

<artist>Will Smith</artist>

<country>USA</country>

<company>Columbia</company>

<price>9.90</price>

<year>1997</year>

</cd>

<cd>

<title>Tupelo Honey</title>

<artist>Van Morrison</artist>

<country>UK</country>

<company>Polydor</company>

<price>8.20</price>

<year>1971</year>

</cd>

<cd>

<title>Soulsville</title>

<artist>Jorn Hoel</artist>

<country>Norway</country>

<company>WEA</company>

<price>7.90</price>

<year>1996</year>

</cd>

<cd>

<title>The very best of</title>

<artist>Cat Stevens</artist>

<country>UK</country>

<company>Island</company>

<price>8.90</price>

<year>1990</year>

</cd>

<cd>

<title>Stop</title>

<artist>Sam Brown</artist>

<country>UK</country>

<company>A and M</company>

<price>8.90</price>

<year>1988</year>

</cd>

<cd>

<title>Bridge of Spies</title>

<artist>T`Pau</artist>

<country>UK</country>

<company>Siren</company>

<price>7.90</price>

<year>1987</year>

</cd>

<cd>

<title>Private Dancer</title>

<artist>Tina Turner</artist>

<country>UK</country>

<company>Capitol</company>

<price>8.90</price>

<year>1983</year>

</cd>

<cd>

<title>Midt om natten</title>

<artist>Kim Larsen</artist>

<country>EU</country>

<company>Medley</company>

<price>7.80</price>

<year>1983</year>

</cd>

<cd>

<title>Pavarotti Gala Concert</title>

<artist>Luciano Pavarotti</artist>

<country>UK</country>

<company>DECCA</company>

<price>9.90</price>

<year>1991</year>

</cd>

<cd>

<title>The dock of the bay</title>

<artist>Otis Redding</artist>

<country>USA</country>

<company>Atlantic</company>

<price>7.90</price>

<year>1987</year>

</cd>

<cd>

<title>Picture book</title>

<artist>Simply Red</artist>

<country>EU</country>

<company>Elektra</company>

<price>7.20</price>

<year>1985</year>

</cd>

<cd>

<title>Red</title>

<artist>The Communards</artist>

<country>UK</country>

<company>London</company>

<price>7.80</price>

<year>1987</year>

</cd>

<cd>

<title>Unchain my heart</title>

<artist>Joe Cocker</artist>

<country>USA</country>

<company>EMI</company>

<price>8.20</price>

<year>1987</year>

</cd>

</catalog>

XSLT 文件:xsltdemo.xslt

<?xml version=“1.0” encoding=“ISO-8859-1”?>

<xsl:stylesheet version=“1.0”

xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=“/”>

<html>

<body>

<h2>My CD Collection</h2>

<table border=“1”>

<tr bgcolor=“#9acd32”>

<th>Title</th>

<th>Artist</th>

</tr>

<tr>

<td><xsl:value-of select=“catalog/cd/title”/></td>

<td><xsl:value-of select=“catalog/cd/artist”/></td>

</tr>

</table>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

转换后的文件,POST MAN 得到得回复 。

<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>

以下是NODE.JS 代码:

var express = require(‘express’);

var app = express();

var fs = require(“fs”);

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)

})

以下是POSTMAN 测试的结果:

Best regards!

Jacky Liu

Assigned tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Echo Chen
      Echo Chen

      感谢分享!