Created 09-20-2017 08:45 AM
I have xml response similar to this :
<?xml version="1.0" encoding="utf-8"?><DayInfo><TalkMessagexmlns="***"><EnvelopeVersion>**</EnvelopeVersion><Header><MessageDetails><Class>****</Class><Qualifier>*****</Qualifier><Function>***</Function><CorrelationID>*****</CorrelationID><ResponseEndPoint/></MessageDetails><SenderDetails><IDAuthentication/><EmailAddress/></SenderDetails></Header><TalkDetails></TalkDetails><Body>
with message like
<person><../person>
<contact>...</contact><data>... </data></Body></DayInfo>
and in my evaluateXpath processors i want to extract data so that i got 3 different xml file with three different message data i used expressions like this ://*[local-name()='person'] for each messages and i got xml response with only person data but i need this data in my xml too:
<TalkMessagexmlns="***"><EnvelopeVersion>**</EnvelopeVersion><Header><MessageDetails><Class>****</Class><Qualifier>*****</Qualifier><Function>***</Function><CorrelationID>*****</CorrelationID><ResponseEndPoint/></MessageDetails><SenderDetails><IDAuthentication/><EmailAddress/></SenderDetails></Header><TalkDetails></TalkDetails>
what should i change to get appropriate response(i mean person message data with TalkMessage data)? good reponse example for person message is:
<?xml version="1.0" encoding="utf-8"?><DayInfo><TalkMessagexmlns="***"><EnvelopeVersion>**</EnvelopeVersion><Header><MessageDetails><Class>****</Class><Qualifier>*****</Qualifier><Function>***</Function><CorrelationID>*****</CorrelationID><ResponseEndPoint/></MessageDetails><SenderDetails><IDAuthentication/><EmailAddress/></SenderDetails></Header><TalkDetails></TalkDetails><Body><person><id></id><name></name></person></Body></DayInfo>
Created 09-27-2017 03:45 AM
You won't be able to do what you want with a single XPath, but this XSLT...
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:foo="***" exclude-result-prefixes="foo"> <xsl:template match="/DayInfo"> <xsl:for-each select="foo:TalkMessage/foo:Body/foo:person"> <xsl:result-document method="xml" href="person_{foo:id}.xml"> <DayInfo> <TalkMessage xmlns="***"> <xsl:copy-of select="/DayInfo/foo:TalkMessage/foo:EnvelopeVersion" /> <xsl:copy-of select="/DayInfo/foo:TalkMessage/foo:Header" /> <xsl:copy-of select="/DayInfo/foo:TalkMessage/foo:TalkDetails" /> <xsl:element name="Body" namespace="***"> <xsl:copy-of select="." /> </xsl:element> </TalkMessage> </DayInfo> </xsl:result-document> </xsl:for-each> </xsl:template> </xsl:stylesheet>
will convert this XML (which is similar to your sample XML response)...
<?xml version="1.0" encoding="UTF-8"?> <DayInfo> <TalkMessage xmlns="***"> <EnvelopeVersion>**</EnvelopeVersion> <Header> <MessageDetails> <Class>****</Class> <Qualifier>*****</Qualifier> <Function>***</Function> <CorrelationID>*****</CorrelationID> <ResponseEndPoint/> </MessageDetails> <SenderDetails> <IDAuthentication/> <EmailAddress/> </SenderDetails> </Header> <TalkDetails>***</TalkDetails> <Body> <!-- with message like --> <person> <id>34</id> <name>Moira Theriault</name> </person> <person> <id>35</id> <name>Cheree Meacham</name> </person> <person> <id>36</id> <name>Kris Demery</name> </person> <contact>...</contact> <data>...</data> </Body> </TalkMessage> </DayInfo>
and will create these three files, person_34.xml, person_35.xml, person_36.xml:
<?xml version="1.0" encoding="UTF-8"?> <DayInfo> <TalkMessage xmlns="***"> <EnvelopeVersion>**</EnvelopeVersion> <Header> <MessageDetails> <Class>****</Class> <Qualifier>*****</Qualifier> <Function>***</Function> <CorrelationID>*****</CorrelationID> <ResponseEndPoint/> </MessageDetails> <SenderDetails> <IDAuthentication/> <EmailAddress/> </SenderDetails> </Header> <TalkDetails>***</TalkDetails> <Body> <person> <id>34</id> <name>Moira Theriault</name> </person> </Body> </TalkMessage> </DayInfo>
<?xml version="1.0" encoding="UTF-8"?> <DayInfo> <TalkMessage xmlns="***"> <EnvelopeVersion>**</EnvelopeVersion> <Header> <MessageDetails> <Class>****</Class> <Qualifier>*****</Qualifier> <Function>***</Function> <CorrelationID>*****</CorrelationID> <ResponseEndPoint/> </MessageDetails> <SenderDetails> <IDAuthentication/> <EmailAddress/> </SenderDetails> </Header> <TalkDetails>***</TalkDetails> <Body> <person> <id>35</id> <name>Cheree Meacham</name> </person> </Body> </TalkMessage> </DayInfo>
<?xml version="1.0" encoding="UTF-8"?> <DayInfo> <TalkMessage xmlns="***"> <EnvelopeVersion>**</EnvelopeVersion> <Header> <MessageDetails> <Class>****</Class> <Qualifier>*****</Qualifier> <Function>***</Function> <CorrelationID>*****</CorrelationID> <ResponseEndPoint/> </MessageDetails> <SenderDetails> <IDAuthentication/> <EmailAddress/> </SenderDetails> </Header> <TalkDetails>***</TalkDetails> <Body> <person> <id>36</id> <name>Kris Demery</name> </person> </Body> </TalkMessage> </DayInfo>
Of course, you'll need to include your actual namespace.
If you don't have access to an XSLT 2.0 processor, you can use the <exslt:document> extension element to XSLT 1.0.