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

sl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl

utput 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/