f



Non-XML tagged value text to XML

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>&quot;Hello World&quot;</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.

0
mikea_59 (17)
1/13/2005 12:54:05 PM
comp.text.xml 8781 articles. 0 followers. Post Follow

1 Replies
1233 Views

Similar Articles

[PageSpeed] 51


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>&quot;Hello World&quot;</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+)=(&quot;.*&quot;|\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/
0
mahotrash (2052)
1/13/2005 4:28:51 PM
Reply: