[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi,
I try to convert some special tags into some more regular tags.
I have something like <starttag/>sometext<endtag/>, but starttag and endtag are tags without content, the content is the sometext.
So I have an example xml and a suggestion for an xsl, but it does not work.
The example xsl runs mostly within XMLSpy but I have to use Saxon8 in my application, and that gave me an exception.
I try to stripp the xsl until it runs with saxon, but than I lost almost of my functionality.
So If someone could give me an advice how to do this with saxon or what else to do.
I I would be very grateful if someone could help me.
Here are the XML (tinytest.xml)
=======================================================================
=======================================================================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="tinytest.xsl"?>
<document>
<story>Test text with
<tabcontent>
<row>
<cell>cell 1</cell>
<cell>cell 2<start type="1"/>TEST TAG TEXT<end endfor="start"/></cell>
<cell>cell 3<start type="5"/>TEST TAG TEXT<end endfor="start"/> </cell>
</row>
</tabcontent> more <start type="2"/>TEST TAG TEXT<end endfor="start"/>
if TEST <start type="3"/><test desc="should be removed"/>TEST TAG
<test1 desc="should be removed">also trash</test1><end endfor="start"/>would need.
And another test text TEST TAG TEXT with some regex markup.
<start type="4"/>TEST TAG TEXT<end endfor="start"/></story>
</document>
=======================================================================
=======================================================================
and the XSL (tinytest.xsl)
=======================================================================
=======================================================================
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.com/tinytest"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template name="breaktest">
<xsl:choose>
<xsl:when test="(name() eq 'start')
and (following-sibling::*[1]/name() eq 'end')
and (following-sibling::*[1]/@endfor eq 'start') ">
<FoundStart>
<xsl:attribute name="mytype"><xsl:value-of select="@type"/></xsl:attribute>
</FoundStart>
</xsl:when>
<xsl:when test="(name() eq 'end')
and (@endfor eq 'start')
and (preceding-sibling::*[1]/name() eq 'start')"><FoundEndWillBeDeleted/></xsl:when>
<xsl:when test="(self::text())
and (preceding-sibling::*[1]/name() eq 'start')
and (following-sibling::*[1]/name() eq 'end')
and (following-sibling::*[1]/@endfor eq 'start')"><FoundTextWillBeDeleted/></xsl:when>
<xsl:when test="(self::text())">
<xsl:analyze-string select="." regex="(.*?)(TEST TAG TEXT)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><FoundTextWillBeChanged/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:when>
<xsl:otherwise>
<xsl:analyze-string select="." regex="(.*?)(TEST TAG TEXT)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><FoundTextWillBeChanged/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
[xsl] Problem with grouping the handling of sibling nodes
Subject: [xsl] Problem with grouping the handling of sibling nodes From: Olaf Meske <omeske@xxxxxxxxxxx> Date: Tue, 08 Mar 2005 14:24:42 +0100 |
Hi,
I try to convert some special tags into some more regular tags.
I have something like <starttag/>sometext<endtag/>, but starttag and endtag are tags without content, the content is the sometext.
So I have an example xml and a suggestion for an xsl, but it does not work.
The example xsl runs mostly within XMLSpy but I have to use Saxon8 in my application, and that gave me an exception.
I try to stripp the xsl until it runs with saxon, but than I lost almost of my functionality.
So If someone could give me an advice how to do this with saxon or what else to do.
I I would be very grateful if someone could help me.
Regards Olaf
Here are the XML (tinytest.xml)
=======================================================================
=======================================================================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="tinytest.xsl"?>
<document>
<story>Test text with
<tabcontent>
<row>
<cell>cell 1</cell>
<cell>cell 2<start type="1"/>TEST TAG TEXT<end endfor="start"/></cell>
<cell>cell 3<start type="5"/>TEST TAG TEXT<end endfor="start"/> </cell>
</row>
</tabcontent> more <start type="2"/>TEST TAG TEXT<end endfor="start"/>
if TEST <start type="3"/><test desc="should be removed"/>TEST TAG
<test1 desc="should be removed">also trash</test1><end endfor="start"/>would need.
And another test text TEST TAG TEXT with some regex markup.
<start type="4"/>TEST TAG TEXT<end endfor="start"/></story>
</document>
=======================================================================
=======================================================================
and the XSL (tinytest.xsl)
=======================================================================
=======================================================================
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.com/tinytest"
>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/"> <xsl:apply-templates /> </xsl:template>
<xsl:template match="story" > <text x="single story"> <xsl:for-each select="node()"> <xsl:call-template name="breaktest"/> </xsl:for-each> </text> </xsl:template> <xsl:template match="cell" > <td x="single cell"> <xsl:for-each select="node()"> <xsl:call-template name="breaktest"/> </xsl:for-each> </td> </xsl:template>
<xsl:template match="row" > <tr> <xsl:apply-templates /> </tr> </xsl:template>
<xsl:template match="tabcontent" > <table> <xsl:apply-templates /> </table> </xsl:template>
<xsl:template name="breaktest">
<xsl:choose>
<xsl:when test="(name() eq 'start')
and (following-sibling::*[1]/name() eq 'end')
and (following-sibling::*[1]/@endfor eq 'start') ">
<FoundStart>
<xsl:attribute name="mytype"><xsl:value-of select="@type"/></xsl:attribute>
</FoundStart>
</xsl:when>
<xsl:when test="(name() eq 'end')
and (@endfor eq 'start')
and (preceding-sibling::*[1]/name() eq 'start')"><FoundEndWillBeDeleted/></xsl:when>
<xsl:when test="(self::text())
and (preceding-sibling::*[1]/name() eq 'start')
and (following-sibling::*[1]/name() eq 'end')
and (following-sibling::*[1]/@endfor eq 'start')"><FoundTextWillBeDeleted/></xsl:when>
<xsl:when test="(self::text())">
<xsl:analyze-string select="." regex="(.*?)(TEST TAG TEXT)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><FoundTextWillBeChanged/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:when>
<xsl:otherwise>
<xsl:analyze-string select="." regex="(.*?)(TEST TAG TEXT)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><FoundTextWillBeChanged/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
======================================================================= =======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] [ANN] xmlroff 0.3.2, Tony Graham | Thread | RE: [xsl] Problem with grouping the, Michael Kay |
RE: [xsl] calling java function wit, Michael Kay | Date | [xsl] Probs using XSLT in browsers, António Mota |
Month |