Subject: AW: [xsl] Translating roman numerals into integers with XSLT 2.0 From: "Huditsch Roman" <Roman.Huditsch@xxxxxxxxxxxxx> Date: Tue, 21 Dec 2004 17:16:02 +0100 |
Hi Antonio, I just embedded it into my stylesheet (of course with all the corresponding acknowledgements) and it seems so work out exactly as it should. Although I must commit that I ran my test with just a few cases so far. wbr, Roman _______________________________________ Roman Huditsch IT and Electronic Publishing LexisNexis ARD Orac Marxergasse 25 1030 Vienna Austria ph: +43-1-534 52-1514 f: +43-1-534 52-140 e-mail roman.huditsch@xxxxxxxxxxxxx www.lexisnexis.at > -----Urspr|ngliche Nachricht----- > Von: Antsnio Mota [mailto:xptm@xxxxxxx] > Gesendet: Dienstag, 21. Dezember 2004 17:05 > An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Betreff: Re: [xsl] Translating roman numerals into integers > with XSLT 2.0 > > Just jumped in on this thread, it seems interesting altought > i won't use for now, but: > > 1) It works only with XSLT 2.0 as the Subject sugests or with 1.0 too? > > 2) Is it well tested? > > 3) If 2==true, it'll go to the List FAQ? > > Cheers. > > Quoting Mukul Gandhi <mukul_gandhi@xxxxxxxxx>: > > > Following is an improved algorithm.. It will work for any large > > number.. > > > > <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > xmlns:num="http://whatever" version="2.0" > > > > > <xsl:output method="text"/> > > > > <xsl:template match="/"> > > <xsl:call-template name="RomanToInteger"> > > <xsl:with-param name="roman_number" select="'XXI'" > > /> > > <xsl:with-param name="index" select="1" /> > > </xsl:call-template> > > </xsl:template> > > > > <xsl:template name="RomanToInteger"> > > <xsl:param name="roman_number" /> > > <xsl:param name="index" /> > > <xsl:choose> > > <xsl:when test="num:toRoman($index) = $roman_number"> > > <xsl:value-of select="$index" /> > > </xsl:when> > > <xsl:otherwise> > > <xsl:call-template name="RomanToInteger"> > > <xsl:with-param name="roman_number" > > select="$roman_number" /> > > <xsl:with-param name="index" select="$index + 1" /> > > </xsl:call-template> > > </xsl:otherwise> > > </xsl:choose> > > </xsl:template> > > > > <xsl:function name="num:toRoman" as="xs:string"> > > <xsl:param name="value" as="xs:integer"/> > > <xsl:number value="$value" format="I"/> </xsl:function> > > > > </xsl:stylesheet> > > > > Regards, > > Mukul > > > > --- Mukul Gandhi <mukul_gandhi@xxxxxxxxx> wrote: > > > > > You could try something like this - > > > > > > <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet > > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > > > > > > > > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > > > > > xmlns:num="http://whatever" version="2.0" > > > > > > > <xsl:output method="text"/> > > > > > > <xsl:variable name="max" select="10000" /> > > > > > > <xsl:template match="/"> > > > <xsl:call-template name="RomanToInteger"> > > > <xsl:with-param name="roman_number" > > > select="'XXI'" > > > /> > > > </xsl:call-template> > > > </xsl:template> > > > > > > <xsl:template name="RomanToInteger"> > > > <xsl:param name="roman_number" /> > > > <xsl:for-each select="1 to $max"> > > > <xsl:if test="num:toRoman(.) = $roman_number"> > > > <xsl:value-of select="." /> > > > </xsl:if> > > > </xsl:for-each> > > > </xsl:template> > > > > > > <xsl:function name="num:toRoman" as="xs:string"> > > > <xsl:param name="value" as="xs:integer"/> > > > <xsl:number value="$value" format="I"/> </xsl:function> > > > > > > </xsl:stylesheet> > > > > > > The above XSL assumes, that there is some maximum value of the > > > number(in this example 10000). > > > > > > I see this as an area of improvement.. > > > > > > Is there a way to break from xsl:for-each loop when some > condition > > > is met? > > > here , xsl:if test="num:toRoman(.) = $roman_number" > > > > > > Regards, > > > Mukul > > > > > > --- Huditsch Roman <Roman.Huditsch@xxxxxxxxxxxxx> > > > wrote: > > > > > > > Hi again, > > > > > > > > Sorry, for bothering you a second time today, but I was > wondering > > > > if there is a more or less simple way of translating roman > > > > numerals into intergers with XSLT 2.0. > > > > > > > > Or do I have to use the standard method for doing this > describes > > > > in the "XSLT Cookbook" by Sal Mangano? > > > > > > > > Would be nice if format-number() or anything > > > similar > > > > would allow > > > > me to o this... > > > > > > > > Thank you very much for your patience. > > > > > > > > wbr, > > > > Roman > > > > > > > > _______________________________________ > > > > > > > > Roman Huditsch > > > > IT and Electronic Publishing > > > > LexisNexis ARD Orac > > > > Marxergasse 25 > > > > 1030 Vienna > > > > Austria > > > > ph: +43-1-534 52-1514 > > > > f: +43-1-534 52-140 > > > > e-mail roman.huditsch@xxxxxxxxxxxxx www.lexisnexis.at > > > > > > > > > > > > > -----Urspr|ngliche Nachricht----- > > > > > Von: Michael Kay [mailto:mike@xxxxxxxxxxxx] > > > > > Gesendet: Montag, 20. Dezember 2004 15:20 > > > > > An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > > > Betreff: RE: [xsl] Omitting default namespace in > > > > the output - XSLT 2.0 > > > > > > > > > > If you copy elements using xsl:copy-of, the > > > output > > > > elements > > > > > will have the same names as the input elements, > > > > and the > > > > > system will automatically add declarations of > > > the > > > > namespaces > > > > > used in these names. You want your output > > > elements > > > > to have a > > > > > different name from the input elements (same > > > local > > > > name, > > > > > different URI). So you can't use copy-of. > > > > > > > > > > To copy a tree while renaming elements, use a > > > > modified form > > > > > of the identity template rule: > > > > > > > > > > <xsl:template match="*"> > > > > > <xsl:element name="{local-name()}"> > > > > > <xsl:copy-of select="@*"/> > > > > > <xsl:apply-templates/> > > > > > </xsl:element> > > > > > </xsl:template> > > > > > > > > > > Michael Kay > > > > > http://www.saxonica.com/ > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > From: Huditsch Roman > > > > [mailto:Roman.Huditsch@xxxxxxxxxxxxx] > > > > > > Sent: 20 December 2004 13:52 > > > > > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > > > > Subject: [xsl] Omitting default namespace in > > > the > > > > output - XSLT 2.0 > > > > > > > > > > > > Hi, > > > > > > > > > > > > Given an example input like: > > > > > > > > > > > > <?xml version="1.0" encoding="UTF-8"?> <norm > > > > > > xmlns="myDefaultNamespace"> > > > > > > <table> > > > > > > <row> > > > > > > <cell>My Table</cell> > > > > > > </row> > > > > > > </table> > > > > > > </norm> > > > > > > > > > > > > I searched for an easy way to get output data, > > > > which is not > > > > > associated > > > > > > to my default namespace any more, with the > > > help > > > > of <xsl:copy-of> in > > > > > > XSLT 2.0 I hoped that the attribute > > > > "copy-namespaces" set to "no" > > > > > > would help me here, but unfortunately I had no > > > > luck with Saxon 8.1.1 > > > > > > > > > > > > My output still looks like > > > > > > > > > > > > <table> > > > > > > <row xmlns="myDefaultNamespace"> > > > > > > <cell>My Table</cell> > > > > > > </row> > > > > > > </table> > > > > > > > > > > > > > > > > > > XSLT: > > > > > > ===== > > > > > > > > > > > > <xsl:template match="ln:table"> > > > > > > <table> > > > > > > <xsl:copy-of select="node() | @*" > > > > > > copy-namespaces="no"/> > > > > > > </table> > > > > > > </xsl:template> > > > > > > > > > > > > > > > > > > Thanks in advance for your input! > > > > > > > > > > > > wbr, > > > > > > Roman > > > > > > _______________________________________ > > > > > > > > > > > > Roman Huditsch > > > > > > IT and Electronic Publishing > > > > > > LexisNexis ARD Orac > > > > > > Marxergasse 25 > > > > > > 1030 Vienna > > > > > > Austria > > > > > > ph: +43-1-534 52-1514 > > > > > > f: +43-1-534 52-140 > > > > > > e-mail roman.huditsch@xxxxxxxxxxxxx > > > > > > www.lexisnexis.at > > > > > > > > > > __________________________________ > > Do you Yahoo!? > > Yahoo! Mail - Helps protect you from nasty viruses. > > http://promotions.yahoo.com/new_mail > > > > > > > > > > O SAPO ja esta livre de vmrus com a Panda Software, fique vocj tambim! > Clique em: http://antivirus.sapo.pt
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
AW: [xsl] Translating roman numeral, Huditsch Roman | Thread | Re: AW: [xsl] Translating roman num, Mukul Gandhi |
Re: [xsl] nested output, David Carlisle | Date | [xsl] non MS transform, Graber, Jeffrey |
Month |