Hi, Thanks everyone for giving their suggestions. I was able to solve this using xslt component in a camel-loop . I am giving the route here just for your reference:
<camel:route> <from uri="file:in/xml?fileName=Customers.xml&noop=true" /> <camel:loop copy="true"> <camel:xpath resultType="java.lang.Integer">count(/PricePlans/Body/customer)</camel:xpath> <camel:setHeader headerName="loopIndex"> <camel:property>CamelLoopIndex</camel:property> </camel:setHeader> <camel:setHeader headerName="custIndex"> <camel:simple>${header.loopIndex}++</camel:simple> </camel:setHeader> <camel:to uri="xslt:file:in/xslt/Customer.xsl" /> <camel:to uri="direct:output" /> </camel:loop> </camel:route> In my XSLT, i am making use of the header "custIndex" to reach out to each customer node. The XSLT looks as below. I was able to achieve this with the feature provided in XSLT component which is "all headers are added as parameters which are available in the XSLT". <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="custIndex" /> <xsl:template match="/"> <customer> <header> <meta-data> <xsl:value-of select="PricePlans/Header/meta-data" /> </meta-data> <date> <xsl:value-of select="PricePlans/Header/date" /> </date> </header> <body> <customer> <id> <xsl:value-of select="PricePlans/Body/customer[$custIndex]/id" /> </id> <name> <xsl:value-of select="PricePlans/Body/customer[$custIndex]/name" /> </name> </customer> </body> </customer> </xsl:template> </xsl:stylesheet> What bothers me here is the use of header values twice in the route. This is because the camel's loop property 'CamelLoopIndex' starts with zero and i cannot pass this directly into the XSLT file. The alternative way of doing this via message translator looks good but i haven't tried it. Any ways, the code is working now :) Regards, Kalyan -- View this message in context: http://camel.465427.n5.nabble.com/How-to-read-XML-Payload-tp5773337p5773431.html Sent from the Camel - Users mailing list archive at Nabble.com.