Reputation: 2776
I'm using a BPEL process to orchestrate two web services. Basically, these two web services return book objects. The first web service return the following data format:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<searchBooksResponse xmlns="urn:soft.xyz.ac.be/">
<book xmlns="">
<author>Robert Ludlum</author>
<year>2004</year>
<isbn>95248457</isbn>
<language>fr</language>
<publisher>Orion</publisher>
<title>La Mémoire dans la peau (SOFT Library)</title>
</book>
<book xmlns="">
<author>Douglas Adams</author>
<year>2002</year>
<isbn>60184547</isbn>
<language>fr</language>
<publisher>Del Rey</publisher>
<title>Le Guide du Voyageur Galactique (SOFT Library)</title>
</book>
</searchBooksResponse>
</soapenv:Body>
</soapenv:Envelope>
The second returns the following format:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<searchForBooksResponse xmlns="http://library.be">
<searchForBooksReturn>
<author>James, E. L.</author>
<date>3914-01-10T23:00:00.000Z</date>
<isbn>0345803485</isbn>
<language>English</language>
<publisher>Vintage Books</publisher>
<title>50 Shades of Grey (National Library)</title>
</searchForBooksReturn>
<searchForBooksReturn>
<author>James Dashner</author>
<date>3914-04-20T22:00:00.000Z</date>
<isbn>0385388896</isbn>
<language>English</language>
<publisher>The Maze Runner Series</publisher>
<title>The Maze Runner Series (National Library)</title>
</searchForBooksReturn>
</searchForBooksResponse>
</soapenv:Body>
</soapenv:Envelope>
To merge the result, I use the following bpel command with xls file. Here is the bpel command:
<![CDATA[bpel:doXslTransform("books.xsl", $sl_searchBooksResponse.parameters, "second", $nl_searchForBooksResponse.parameters/*)]]>
And here is the xsl file:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL
/Transform" xmlns="urn:soft.librarysearch" xmlns:tns="urn:soft.librarysearch" xmlns:nl="http://library.be">
<xsl:param name="second">
foo
</xsl:param>
<xsl:template match="/">
<root>
<xsl:apply-templates />
<xsl:copy-of select="$second"/>
</root>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:template> -->
</xsl:stylesheet>
However, the result shows the inconsistency as follows:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>
<LibrarySearchResponse xmlns="urn:soft.librarysearch" xmlns:tns="urn:soft.librarysearch">
<tns:query/>
<tns:books xmlns:nl="http://library.be">
<searchBooksResponse xmlns="urn:soft.xxx.ac.be/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<book xmlns="">
<author>Robert Ludlum</author>
<year>2004</year>
<isbn>95248457</isbn>
<language>fr</language>
<publisher>Orion</publisher>
<title>La Mémoire dans la peau (SOFT Library)</title>
</book>
<book xmlns="">
<author>Douglas Adams</author>
<year>2002</year>
<isbn>60184547</isbn>
<language>fr</language>
<publisher>Del Rey</publisher>
<title>Le Guide du Voyageur Galactique (SOFT Library)</title>
</book>
</searchBooksResponse>
<searchForBooksReturn xmlns="http://library.be" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<author>James, E. L.</author>
<date>3914-01-10T23:00:00.000Z</date>
<isbn>0345803485</isbn>
<language>English</language>
<publisher>Vintage Books</publisher>
<title>50 Shades of Grey (National Library)</title>
</searchForBooksReturn>
<searchForBooksReturn xmlns="http://library.be" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<author>James Dashner</author>
<date>3914-04-20T22:00:00.000Z</date>
<isbn>0385388896</isbn>
<language>English</language>
<publisher>The Maze Runner Series</publisher>
<title>The Maze Runner Series (National Library)</title>
</searchForBooksReturn>
</tns:books>
</LibrarySearchResponse> </soapenv:Body> </soapenv:Envelope>
I want all book objects using the same tags "book", and they should be placed at the same level by removing tag "searchBooksResponse". For example, change tag "searchForBooksReturn" to "book". How can I do that? Thanks for your patient on my very long question.
Upvotes: 0
Views: 76
Reputation: 117165
How about:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nl="http://library.be"
exclude-result-prefixes="nl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="second"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="//book"/>
<xsl:apply-templates select="$second//nl:searchForBooksReturn"/>
</root>
</xsl:template>
<xsl:template match="nl:searchForBooksReturn">
<book>
<xsl:apply-templates/>
</book>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Upvotes: 1