С учетом следующего XML:
<text>
<h6>Title</h6>
<p>Text is right here</p>
<h6>Title</h6>
<p>Text is right here</p>
<pagebreak orientation="portrait@1col" />
<h2>This is an H2 Title</h2>
<figure-gallery>
<figure>
<figure-headline>Headline</figure-headline>
<figure-asset>Image tag to display image</figure-asset>
<figure-caption>Caption of the image</figure-caption>
</figure>
<figure>
<figure-headline>Headline</figure-headline>
<figure-asset>Image tag to display image</figure-asset>
<figure-caption>Caption of the image</figure-caption>
</figure>
</figure-gallery>
<h1>This is an H1 title</h1>
</text>
И следующий XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan" exclude-result-prefixes="xalan">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="pagebreak[1]">
<div id="empty-html-container" />
</xsl:template>
<xsl:template match="h6">
<div class="Title">
<xsl:apply-templates select="@*|node()"/>
</div>
</xsl:template>
<xsl:template match="p">
<div class="Text">
<xsl:apply-templates select="@*|node()"/>
</div>
</xsl:template>
<xsl:template match="figure-asset">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="figure">
<div>
<header>
<xsl:copy-of select="figure-headline/p/node()"/>
</header>
<section>
<xsl:apply-templates select="figure-asset"/>
</section>
<footer>
<xsl:value-of select="figure-caption"/>
</footer>
</div>
</xsl:template>
<xsl:template match="figure-gallery">
<div class="figure-gallery">
<xsl:apply-templates/>
</div>
</xsl:template>
Почему выходные данные выглядят так (родственные элементы после разрыва страницы являются дочерними элементами вывода шаблона разрыва страницы) ...
<section>
<div class="Title">Title</div>
<div class="BulletText">Text is right here</div>
<div class="BulletTitle">Title</div>
<div class="BulletText">Text is right here</div>
<div class="BulletTitle">Title</div>
<div class="BulletText">Text is right here</div>
<div id="empty-html-container">
<h2>This is an H2 Title</h2>
<div class="figure-gallery">
<div>
<header>Headline</header>
<section>Image tag to display image</section>
<footer>Caption of the image</footer>
</div>
<div>
<header>Headline</header>
<section>Image tag to display image</section>
<footer>Caption of the image</footer>
</div>
</div>
<h1>This is an H1 title</h1>
</div>
</section>
... вместо того, чтобы выглядеть так (элементы одного уровня после разрыва страницы остаются элементами одного уровня после разрыва страницы):
<section>
<div class="Title">Title</div>
<div class="BulletText">Text is right here</div>
<div class="BulletTitle">Title</div>
<div class="BulletText">Text is right here</div>
<div class="BulletTitle">Title</div>
<div class="BulletText">Text is right here</div>
<div id="empty-html-container"></div>
<h2>This is an H2 Title</h2>
<div class="figure-gallery">
<div>
<header>Headline</header>
<section>Image tag to display image</section>
<footer>Caption of the image</footer>
</div>
<div>
<header>Headline</header>
<section>Image tag to display image</section>
<footer>Caption of the image</footer>
</div>
</div>
<h1>This is an H1 title</h1>
</section>
Пустой элемент позволяет JavaScript выполнять некоторую работу после загрузки страницы браузером.
Одна любопытная вещь: когда я помещаю текст внутри "div" в выводе, он будет работать как положено, но если я оставлю его пустым, то братья и сестры станут детьми.
Прямо сейчас у меня есть тег "br", потому что он не отображается и решает мою проблему, но добавляет строку возврата, которую я не хочу, потому что это портит мой дизайн.
Заранее спасибо за помощь.