I would like to use XSLT to translate some tagged value text to XML elements like this: Input Doc: <data>x=1.234 y=ABC z="Hello World"</data> Output Doc: <x>1.234</value> <y>ABC</y> <z>"Hello World"</z> Is XSLT up to the task? What would it look like? Most of the XSLT string processing code I've seen looks very verbose - can't be too efficient.
mikea_59 wrote: > I would like to use XSLT to translate some tagged value text to XML > elements like this: > > Input Doc: > > <data>x=1.234 y=ABC z="Hello World"</data> > > Output Doc: > > <x>1.234</value> > <y>ABC</y> > <z>"Hello World"</z> > > Is XSLT up to the task? What would it look like? Most of the XSLT > string processing code I've seen looks very verbose - can't be too > efficient. Using XSLT 2.0 you can do that with regular expression matching as follows: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <xsl:template match="/"> <results> <xsl:apply-templates /> </results> </xsl:template> <xsl:template match="data"> <xsl:analyze-string select="." regex="((\w+)=(".*"|\S+))"> <xsl:matching-substring> <xsl:element name="{regex-group(2)}"> <xsl:value-of select="regex-group(3)" /> </xsl:element> </xsl:matching-substring> </xsl:analyze-string> </xsl:template> </xsl:stylesheet> Output with Saxon 8.2 is <?xml version="1.0" encoding="UTF-8"?> <results> <x>1.234</x> <y>ABC</y> <z>"Hello World"</z> </results> With XSLT 1.0/XPath 2.0 you need to write a template that processes the string x=1.234 y=ABC z="Hello World" recursively using functions substring-before/substring-after. -- Martin Honnen http://JavaScript.FAQTs.com/