XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Ian ShulerSubject: Filtering output from a repeating xml tag structure
Author: Ian Shuler
Date: 13 Jun 2005 06:12 PM
Hi folks....I am stumped at how to do this. I have an xml file produced as an output from a java process. Similar to:

<root>
<child1>
<transaction name="sessionvars">
<datamap ID="1" name="sessionvars" rowcount="1">
<data rowcount="1">
<row number="1">
<col number="1" name="servername">127.0.0.1</col>
<col number="1" name="remotehost">127.0.0.1</col>
<col number="1" name="requestedsessionid">C56FA5B785419EF9BBE16E870FE515FB</col>

<col number="1" name="maxinactiveinterval">1800</col>
<col number="1" name="applicationname">test</col>
<col number="1" name="contextpath">/test</col>
<col number="1" name="creationtime">1118693895328</col>
<col number="1" name="requesturi">/test/transform</col>
<col number="1" name="pathinfo"></col>
<col number="1" name="authtype"></col>
<col number="1" name="serverport">8080</col>
<col number="1" name="scheme">http</col>
<col number="1" name="protocol">HTTP/1.1</col>
<col number="1" name="remoteuser"></col>
<col number="1" name="pathtranslated"></col>
<col number="1" name="servletpath">/transform</col>
<col number="1" name="sessionid">4ac34ed5-dc48-11d9-9f2c-a1f77389ec34</col>
<col number="1" name="lastaccessedtime">1118693895343</col>
<col number="1" name="remoteaddr">127.0.0.1</col>
</row>
</data>
</datamap>
</transaction>
<transaction name="select_data">
<datamap ID="1" name="db" rowcount="1">
<data rowcount="1">
<row number="1">
<col number="1" name="PK">1</col>
<col number="2" name="CID">006300000028CZ9AAM</col>
<col number="3" name="OID">006300000028CZ9AAM</col>
<col number="4" name="EXPIRATIONDATE">2005-06-15</col>
<col number="5" name="CONTACTNAME">Argentina Holdings-new trade lead</col>
</row>
</data>
</datamap>
</transaction>
</child1>
</root>

I want to exclude the first transaction type (sessionvars) and subsequent result tree from the xsl output. I want the second transaction type to output the result tree to a SOAP message from the same xsl.

I have been using the attached xslt as a template but cannot seem to: 1) get rid of the sessionvars result tree (although I have not used the exclude-result-prefixes declaration yet in the xsl:stylesheet declaraion), and 2) select the specific values of the second transaction to populate areas of the soap:Body.

Any insight would be greatly appreciated...



Documenttest_1.xml
xml data

Unknowntestxsl.xsl
XSL Baseline

Postnext
Ivan PedruzziSubject: Filtering output from a repeating xml tag structure
Author: Ivan Pedruzzi
Date: 13 Jun 2005 10:55 PM
Hi Ian,

The following is a revisited version of your XSLT.

I didn't know if the input XML can contains more the 2 transactions so I restricted the apply template to match the first with name different of 'sessionvars'.

I made the soap namespace definition literally in the envelope element rather then in the xslt root to avoid propagation where is not required.

I had to change the test for 'expirationdate' because String comparison in XSLT is case sensitive.

In you XML input sample there is no 'col' element with attribute 'name' equal to 'OpportunityID' so the test fails.

Hope this helps
Ivan Pedruzzi
Stylus Studio Team


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
<xsl:apply-templates select="/*/*/transaction[@name!='sessionvars'][1]"/>
</xsl:template>

<xsl:template match="transaction">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<SessionHeader xmlns="urn:foo.soap.bar.com">
<sessionId>4I1yNabX_5FyOGOnuFO64VpRP079_jXlNKOSU</sessionId>
</SessionHeader>
</soap:Header>
<soap:Body>
<update xmlns="urn:foo.soap.bar.com">
<sObjects>
<type xmlns="urn:foo1.foo.soap.bar.com">Opportunity</type>
<xsl:for-each select="datamap/data/row">
<xsl:for-each select="col">
<xsl:variable name="colName" select="@name"/>
<xsl:if test="$colName='OpportunityID'">
<Id>
<xsl:value-of select="."/>
</Id>
</xsl:if>
<xsl:if test="$colName='EXPIRATIONDATE'">
<Expiration_Date__c xmlns="">
<xsl:value-of select="."/>
</Expiration_Date__c>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</sObjects>
</update>
</soap:Body>
</soap:Envelope>
</xsl:template>


</xsl:stylesheet>

Posttop
Ian ShulerSubject: Filtering output from a repeating xml tag structure
Author: Ian Shuler
Date: 14 Jun 2005 08:29 AM
Hi Ivan,

Thanks a million....this is what I was trying to accomplish.

Cheers,

Ian

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.