> Message: 1 > Date: Mon, 16 Jul 2012 11:09:56 +0100 > From: stuart shepherd <jonny.w...@googlemail.com> > > <xsl:template match="//control[name='DelaySeconds']/numeric/max"> > <xsl:element name="{name(.)}"> > <xsl:value-of select="translate(string(.), '110', '5')" /> > </xsl:element> > </xsl:template> > > translate is not useful here: it just translates characters in the data according to the mapping, defined by operands 2 and 3. 1 => 5, and 0 to nothing.
-W > <xsl:template match="//control[name='DelaySeconds']/numeric/scalemax"> > <xsl:element name="{name(.)}"> > <xsl:value-of select="translate(string(.), '110', '5')" /> > </xsl:element> > </xsl:template> > > </xsl:stylesheet> > > This replace the strings > > <max>110</max> > <scalemax>110</scalemax> > > with > > <max>55</max> > <scalemax>55</scalemax> > > but what I want is > > <max>5</max> > <scalemax>5</scalemax> > > I've tried using replace instead of translate but I get the error message > > xmlXPathCompOpEval: function replace not found > XPath error : Unregistered function > > Any ideas how to get round that? > > Cheers > Stuart. > > > > > On Fri, Jul 13, 2012 at 11:40 AM, stuart shepherd <jonny.w...@googlemail.com > >> wrote: >> > > >> Hi >> >> I've had a look at this and I'm not sure it does it exactly what I want. >> >> My Main XML will look something like this >> >> <control> >> <name>ControlName</name> >> <max>50</max> >> .... >> </control> >> >> The control name is unique to that control, which is what I use to >> identify it. >> There will several controls in the XML files. >> I need to change one or two of the max values of them, not all, and not >> all to the same value. >> The control element will contain other elements other than max. >> >> After looking at your example I thought I could add an element to my sub >> set XML that looks something like this. >> >> <override> >> <name>ControlName</name> <!-- this will be the unique name of the >> control whose values I want to change --> >> <max>100</max> <!-- the value I want to change --> >> </override> >> >> So what I want to do is look at the subset XML file and if there is an >> override element find the control that it names and then overwrite the >> value that is specified within the override element, it may be other >> elements other than max, and maybe more than one. If it's easier I could >> several overrides each one containing only a single override value. >> >> Is this possible with XSLT? >> >> Thank you for your help. >> >> Stuart. >> >> >> On Thu, Jul 12, 2012 at 7:07 PM, Piotr Sipika <piotr...@optonline.net>wrote: >> >> >>> On 07/12/2012 09:53 AM, stuart shepherd wrote: >>> >>>> Searching the web I've seen some examples in XSLT on how to >>>> do something like this, but I have never used XSLT. Does anyone know if >>>> there is a way to do this in XML. >>>> >>> XSLT is your best bet. >>> >>> Here's a sample stylesheet which will: >>> - change the name of all elements named 'old' to 'new' >>> - change the name of all elements with an attribute named 'old' to 'new' >>> >>> ---- BEGIN stylesheet ---- >>> >>> <?xml version="1.0" standalone="yes"?> >>> <xsl:stylesheet version="1.0" >>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> >>> <xsl:output method="xml"/> >>> >>> <!-- Template matches every node and attribute--> >>> <xsl:template match="node()|@*"> >>> >>> <xsl:choose> >>> <!-- if name of element is 'old' or element contains an attribute >>> named 'old', replace it with 'new' --> >>> <xsl:when test="@old or name(.)='old'"> >>> <xsl:variable name="old_node" select="node()"/> >>> <xsl:variable name="old_value" select="./text()"/> >>> <xsl:variable name="attributes" select="@*"/> >>> <xsl:variable name="children" select="./*"/> >>> >>> <!-- create a 'new' element with attributes and children from >>> the 'old' node, with its old value --> >>> <xsl:element name="new"> >>> <xsl:copy-of select="$attributes|$children"/> >>> <xsl:value-of select="$old_value"/> >>> </xsl:element> >>> </xsl:when> >>> >>> <!-- else, just copy the node/attributes --> >>> <xsl:otherwise> >>> <xsl:copy> >>> <xsl:apply-templates select="node()|@*"/> >>> </xsl:copy> >>> </xsl:otherwise> >>> </xsl:choose> >>> </xsl:template> >>> >>> </xsl:stylesheet> >>> >>> ---- END stylesheet ---- >>> >>> Sample XML: >>> <?xml version="1.0" standalone="yes"?> >>> <swap> >>> <old attr="attr1">This used to be inside the old node >>> <old_child1>This is old_child1</old_child1> >>> </old> >>> <foo attr="attr2">This is just a middle element...</foo> >>> <foo old="old attribute"/> >>> </swap> >>> >>> Output of stylesheet processing using xsltproc (libxml 20708, libxslt >>> 10126 and libexslt 815): >>> >>> $ xsltproc swap.xsl swap.xml >>> <?xml version="1.0"?> >>> <swap> >>> <new attr="attr1"><old_child1>This is old_child1</old_child1>This used >>> to be inside the old node >>> </new> >>> <foo attr="attr2">This is just a middle element...</foo> >>> <new old="old attribute"/> >>> </swap> >>> >>> >>> You can modify the attribute match criteria (@old) to actually evaluate >>> its contents ([@old='old_parent']), etc... >>> >>> Hope this helps. >>> >>> Piotr >>> >>> >> > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: > <https://mail.gnome.org/archives/xml/attachments/20120716/2768f163/attachment.html> > > ------------------------------ > > _______________________________________________ > xml mailing list > xml@gnome.org > https://mail.gnome.org/mailman/listinfo/xml > > > End of xml Digest, Vol 99, Issue 7 > ********************************** > -- wolfgang.l...@thalesgroup.com - Software Technology Thales Austria GmbH voice: +43 (0) 1 27711-5662 Scheydgasse 41 fax: +43 (0) 1 27711-1173 1210 Vienna, Austria http://www.thalesgroup.com (FN 278233 t - Handelsgericht Wien/Commercial Court Vienna)
<<attachment: wolfgang_laun.vcf>>
_______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml