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/