|
Subject: Re: Transforming an incorrectly structured document... From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Mon, 04 Dec 2000 14:20:18 +0000 |
I hope it helps -- Wendell
INPUT FILE: <levels> <h1>Header 1</h1> <stuff>Content under 1</stuff> <h2>header 1.1</h2> <stuff>Content under 1.1</stuff> <stuff>More content under 1.1</stuff> <h2>header 1.2</h2> <stuff>Content under 1.2</stuff> <h2>header 1.3</h2> <stuff>Content under 1.3</stuff> <h3>header 1.3.1</h3> <stuff>Content under 1.3.1</stuff> <h4>header 1.3.1.1</h4> <stuff>Content under 1.3.1.1</stuff> <h5>header 1.3.1.1.1</h5> <stuff>Content under 1.3.1.1.1</stuff> <h1>Header 2</h1> <stuff>Content under 2</stuff> <h2>header 2.1</h2> <stuff>Content under 2.1 </stuff> <h2>header 2.2</h2> <stuff>Content under 2.2</stuff> <h3>header 2.2.1</h3> <stuff>Content under 2.2.1</stuff> <h2>header 2.3</h2> <stuff>Content under 2.3</stuff> </levels>
STYLESHEET:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><!-- this key should match any 'stuff-level' elements you have such
as paragraphs, lists etc. -->
<xsl:key name='stuffchildren' match="stuff"
use="generate-id((..|preceding-sibling::h1|preceding-sibling::h2|preceding-sibling::h3|preceding-sibling::h4|preceding-sibling::h5)[last()])"/><xsl:key name="h2children" match="h2" use="generate-id(preceding-sibling::h1[1])"/>
<xsl:key name="h3children" match="h3" use="generate-id(preceding-sibling::h2[1])"/>
<xsl:key name="h4children" match="h4" use="generate-id(preceding-sibling::h3[1])"/>
<xsl:key name="h5children" match="h5" use="generate-id(preceding-sibling::h4[1])"/>
<xsl:template match="levels">
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
<xsl:apply-templates select="h1"/>
</xsl:template><xsl:template match="h1">
<section level="1">
<head>
<xsl:apply-templates/>
</head>
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
<xsl:apply-templates select="key('h2children', generate-id())"/>
</section>
</xsl:template><xsl:template match="h2">
<section level="2">
<head>
<xsl:apply-templates/>
</head>
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
<xsl:apply-templates select="key('h3children', generate-id())"/>
</section>
</xsl:template><xsl:template match="h3">
<section level="3">
<head>
<xsl:apply-templates/>
</head>
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
<xsl:apply-templates select="key('h4children', generate-id())"/>
</section>
</xsl:template><xsl:template match="h4">
<section level="4">
<head>
<xsl:apply-templates/>
</head>
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
<xsl:apply-templates select="key('h5children', generate-id())"/>
</section>
</xsl:template><xsl:template match="h5">
<section level="5">
<head>
<xsl:apply-templates/>
</head>
<xsl:apply-templates select="key('stuffchildren', generate-id())"/>
</section>
</xsl:template><xsl:template match="stuff"> <data><xsl:apply-templates/></data> </xsl:template>
RESULT (using SAXON):
<?xml version="1.0" encoding="utf-8"?>
<section level="1">
<head>Header 1</head>
<data>Content under 1</data>
<section level="2">
<head>header 1.1</head>
<data>Content under 1.1</data>
<data>More content under 1.1</data>
</section>
<section level="2">
<head>header 1.2</head>
<data>Content under 1.2</data>
</section>
<section level="2">
<head>header 1.3</head>
<data>Content under 1.3</data>
<section level="3">
<head>header 1.3.1</head>
<data>Content under 1.3.1</data>
<section level="4">
<head>header 1.3.1.1</head>
<data>Content under 1.3.1.1</data>
<section level="5">
<head>header 1.3.1.1.1</head>
<data>Content under 1.3.1.1.1</data>
</section>
</section>
</section>
</section>
</section>
<section level="1">
<head>Header 2</head>
<data>Content under 2</data>
<section level="2">
<head>header 2.1</head>
<data>Content under 2.1 </data>
</section>
<section level="2">
<head>header 2.2</head>
<data>Content under 2.2</data>
<section level="3">
<head>header 2.2.1</head>
<data>Content under 2.2.1</data>
</section> </section>
<section level="2">
<head>header 2.3</head>
<data>Content under 2.3</data>
</section>
</section>...The XML is as follows:...
<div>
<p />
<h1>Overview</h1>
<p>Use Slater guards when a riser is subject to minor damage, such as in a
walkway. Use split casings and/or protection posts when a riser is subject to
heavy damage, such as in a</p>
<h1>Factors</h1>
<h2>What to look for</h2>
<p>lane or docking bay.</p>
<p>Slater guards and split casings come in 1 meter lengths, but may be cut or
joined as necessary.</p>
<p>Order the split casing attaching lugs separately, and weld them on.</p>
The ideal would be to structure the document as follows:
<div><h1>Overview</h1><p>Use Slater guards when a riser is subject to minor damage, such as in a walkway. Use split casings and/or protection posts when a riser is subject to heavy damage, such as in a</p></div>
<div><h1>Factors</h1><h2>What to look for</h2><p>lane or docking bay.</p><p>Slater guards and split casings come in 1 meter lengths, but may be cut or joined as necessary.</p><p>Order the split casing attaching lugs separately, and weld them on.</p></div>
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Transforming an incorrectly structu, Ben Skelton | Thread | Re: Transforming an incorrectly str, Jeni Tennison |
| XSLT, Namespaces & SVG, Kane, David | Date | Re: Finding namespace definitions (, Jeni Tennison |
| Month |