I want to Convert a string value into decimal by using XSLT 2.0 to last two decimal places. I want to change the value of Country Code element to decimal.The input string length is fixed i.e 11.
Input XML:
<GetPersonResponse xmlns="http://ift.tt/1GsuVdE">
<Person xsi:type="ns1:Person" xmlns:xsi="http://ift.tt/ra1lAU">
<ns2:PersonId xmlns:ns2="http://ift.tt/1GsuU9y">4224</ns2:PersonId>
<ns3:FirstName xmlns:ns3="http://ift.tt/1GsuU9y">Omer</ns3:FirstName>
<ns4:LastName xmlns:ns4="http://ift.tt/1GsuU9y">Khalid</ns4:LastName>
<ns5:FatherName xmlns:ns5="http://ift.tt/1GsuU9y">Khalid</ns5:FatherName>
<ns6:Religion xmlns:ns6="http://ift.tt/1GsuU9y">Islam</ns6:Religion>
<ns7:MotherTongue xmlns:ns7="http://ift.tt/1GsuU9y">Urrdu</ns7:MotherTongue>
<ns8:DateOfBirth xmlns:ns8="http://ift.tt/1GsuU9y">1993-02-02</ns8:DateOfBirth>
<ns9:Gender xmlns:ns9="http://ift.tt/1GsuU9y" xsi:type="ns1:GenderType">Male</ns9:Gender>
<ns10:CurrentAddress xmlns:ns10="http://ift.tt/1GsuU9y" xsi:type="ns1:AddressDetail">
<ns10:AddressDetailId>194</ns10:AddressDetailId>
<ns10:StreetNo>5</ns10:StreetNo>
<ns10:HouseNo>361</ns10:HouseNo>
<ns10:Town>Johar</ns10:Town>
<ns10:District>Lahore</ns10:District>
<ns10:City>Lahore</ns10:City>
<ns10:State>Punjab</ns10:State>
<ns10:Country>Pakistan</ns10:Country>
<ns10:Postal>54046543245</ns10:Postal>
</ns10:CurrentAddress>
<ns11:HomeAddress xmlns:ns11="http://ift.tt/1GsuU9y" xsi:type="ns1:AddressDetail">
<ns11:AddressDetailId>195</ns11:AddressDetailId>
<ns11:StreetNo>5</ns11:StreetNo>
<ns11:HouseNo>361</ns11:HouseNo>
<ns11:Town>Johar</ns11:Town>
<ns11:District>Lahore</ns11:District>
<ns11:City>Lahore</ns11:City>
<ns11:State>Punjab</ns11:State>
<ns11:Country>Pakistan</ns11:Country>
<ns11:Postal>54046543245</ns11:Postal>
</ns11:HomeAddress>
<ns12:Height xmlns:ns12="http://ift.tt/1GsuU9y">6</ns12:Height>
<ns13:Weight xmlns:ns13="http://ift.tt/1GsuU9y">100</ns13:Weight>
<ns14:CNIC xmlns:ns14="http://ift.tt/1GsuU9y">35302</ns14:CNIC>
<ns15:ContactInfo xmlns:ns15="http://ift.tt/1GsuU9y" xsi:type="ns1:ContactDetail">
<ns15:HomePhone>454545</ns15:HomePhone>
<ns15:CellPhone>3343434</ns15:CellPhone>
<ns15:WorkPlacePhone>34343434</ns15:WorkPlacePhone>
<ns15:Email>omer@gmail.com</ns15:Email>
</ns15:ContactInfo>
<ns16:MaritalStatus xmlns:ns16="http://ift.tt/1GsuU9y">Single</ns16:MaritalStatus>
<ns17:Nationality xmlns:ns17="http://ift.tt/1GsuU9y">Pakistani</ns17:Nationality>
</Person>
<ResponseCode>PERSON MODULE SUCCESS - 00</ResponseCode>
<ResponseMessage>Data Fetched Successfully</ResponseMessage>
</GetPersonResponse>
Input XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://ift.tt/tCZ8VR"
xmlns="http://ift.tt/1GsuVdE"
xmlns:soapenv="http://ift.tt/sVJIaE"
xmlns:m0="http://ift.tt/1GsuU9y"
xmlns:m="http://ift.tt/1x8AvMV"
>
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//m0:CNIC"/>
</xsl:template>
<xsl:template match="//m0:CNIC">
<m:GetPersonResponse>
<m:PersonId>
<m:NationalIdentityNumber>
<xsl:value-of select="//m0:CNIC"/>
</m:NationalIdentityNumber>
<m:CountryCode>
<xsl:attribute name="name"><xsl:value-of select="//m0:Postal"/></xsl:attribute>
<xsl:attribute name="type">xs:decimal</xsl:attribute>
</m:CountryCode>
</m:PersonId>
</m:GetPersonResponse>
</xsl:template>
</xsl:stylesheet>
Current XML Output:
<?xml version="1.0" encoding="UTF-8"?>
<m:GetPersonResponse xmlns:m="http://ift.tt/1x8AvMV" xmlns="http://ift.tt/1GsuVdE" xmlns:m0="http://ift.tt/1GsuU9y" xmlns:soapenv="http://ift.tt/sVJIaE">
<m:PersonId>
<m:NationalIdentityNumber>35302</m:NationalIdentityNumber>
<m:CountryCode name="54046543245" type="xs:decimal" />
</m:PersonId>
</m:GetPersonResponse>
Required XML Output:
<?xml version="1.0" encoding="UTF-8"?>
<m:GetPersonResponse xmlns:m="http://ift.tt/1x8AvMV" xmlns="http://ift.tt/1GsuVdE" xmlns:m0="http://ift.tt/1GsuU9y" xmlns:soapenv="http://ift.tt/sVJIaE">
<m:PersonId>
<m:NationalIdentityNumber>35302</m:NationalIdentityNumber>
<m:CountryCode name="540465432.45" type="xs:decimal" />
</m:PersonId>
</m:GetPersonResponse>
Note: There is also an approach in my mind that we can somehow convert our string into decimal and then divide it by 100. But how will it be done?
No comments:
Post a Comment