> Message: 1 > Date: Mon, 16 Jul 2012 11:09:56 +0100 > From: stuart shepherd <[email protected]> > > <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 <[email protected]
>
>> 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 <[email protected]>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
> [email protected]
> https://mail.gnome.org/mailman/listinfo/xml
>
>
> End of xml Digest, Vol 99, Issue 7
> **********************************
>
--
[email protected] - 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/ [email protected] https://mail.gnome.org/mailman/listinfo/xml
