|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: string replacement based on other conditions
Hi Guru,
If I can asume that your XML is always formed in the same way like:
<ROOT>
<Property>
<Label>Dbms Data Type</Label>
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">NUMBER</Value>
</Property>
<Property>
<Label>Dbms Data Type Length</Label>
<PermanentName>S_LDD_LEN</PermanentName>
<Value DataType="INTEGER">16</Value>
</Property>
<Property>
<Label>Data Storage Precision</Label>
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">1</Value>
</Property>
</ROOT>
You can use this:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ROOT">
<xsl:element name="ROOT">
<xsl:apply-templates select="Property"/>
</xsl:element>
</xsl:template>
<xsl:template match="Property">
<xsl:choose>
<xsl:when test="Label='Dbms Data Type'">
<xsl:variable name="Length">
<xsl:value-of select="../Property[position()=2]/Value"/>
</xsl:variable>
<xsl:variable name="Precision">
<xsl:value-of select="../Property[position()=3]/Value"/>
</xsl:variable>
<xsl:element name="Property">
<xsl:copy-of select="./Label"/>
<xsl:copy-of select="./PermanentName"/>
<xsl:element name="Value">
<xsl:choose>
<xsl:when test="($Length < 4 and $Precision=0)">
<xsl:attribute name="DataType">
<xsl:value-of select="./Value/@DataType"/>
</xsl:attribute>
<xsl:value-of select="'SMALL INTEGER'"/>
</xsl:when>
<xsl:when test="($Length >= 4 and $Length < 15 and $Precision=0)">
<xsl:attribute name="DataType">
<xsl:value-of select="./Value/@DataType"/>
</xsl:attribute>
<xsl:value-of select="'INTEGER'"/>
</xsl:when>
<xsl:when test="($Length > 15 and $Precision=0)">
<xsl:attribute name="DataType">
<xsl:value-of select="./Value/@DataType"/>
</xsl:attribute>
<xsl:value-of select="'BIGINT'"/>
</xsl:when>
<xsl:when test="($Length > 15 and ($Precision=1 or $Precision=2))">
<xsl:attribute name="DataType">
<xsl:value-of select="./Value/@DataType"/>
</xsl:attribute>
<xsl:value-of select="'DECIMAL'"/>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="DataType">
<xsl:value-of select="./Value/@DataType"/>
</xsl:attribute>
<xsl:value-of select="./Value"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
success!!
Greetings Rene
{ @ @ }
^
\__/
"You don't need eyes to see, you need vision!"
-----Oorspronkelijk bericht-----
Van: guru prasad [SMTP:guruprasadv@xxxxxxxxx]
Verzonden: maandag 25 juni 2001 11:09
Aan: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Onderwerp: string replacement based on other conditions
hai everybody,I got a problem.This is a example xml
file .
here is the sample xml file:
<Property>
<Label>Dbms Data Type</Label>
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">NUMBER</Value> //comment this has to be changed based on conditions
</Property>
<Property>
<Label>Dbms Data Type Length</Label>
<PermanentName>S_LDD_LEN</PermanentName>
<Value DataType="INTEGER">4</Value>
</Property>
<Property>
<Label>Data Storage Precision</Label>
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">0</Value>
</Property>
what i want is:
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">NUMBER</Value>,which is there in the above xml file to be
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">SMALL INTEGER<value> ------NUMBER SHOULD BECOME SMALL INTEGER ONLY IF
<Value DataType="INTEGER">4</Value>---- which has got a value less than 4
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">0</Value>------ which has got a precision of 0
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">INTEGER<value> ------NUMBER SHOULD BECOME INTEGER ONLY IF
<Value DataType="INTEGER">4</Value>---- which has got a value between 4 and 15
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">0</Value>------which has got a precision of zero
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">BIGINT<value> ------NUMBER SHOULD BECOME BIGINT ONLY IF
<Value DataType="INTEGER">4</Value>---- which has got a value greater than 15
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">0</Value>----which has got a precision of zero
<PermanentName>S_LDD_DBMS_DATA_TYPE</PermanentName>
<Value DataType="STRING">DECIMAL<value> ------NUMBER SHOULD BECOME DECIMAL ONLY IF
<Value DataType="INTEGER">4</Value>---- which has got a value greater than 15
<PermanentName>S_LDD_PRECISION</PermanentName>
<Value DataType="INTEGER">0</Value>----which has got a precision of 1 or 2
CAN ANYBODY HELP ME IN THIS MATTER
THANKS
GURU
__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








