To Mike Ferrando,
yes it works! great!
It looks like very difficult so i need time to understand it ;-),
but thank you very much for this solution!
regards
Silvia
Von: Mike Ferrando <mikeferrando(_at_)yahoo(_dot_)com>
Silvia L.,
I was messing around with this and came up with a solution.
I probably write things different than you do. Others on this list
would greatly simplify these templates. However, I wanted you to see
how it works. I use for-each only in special circumstances.
Hope you like it.
Mike Ferrando
Library Technician
Library of Congress
Washington, DC
202-707-4454
===XML:===
<?xml version="1.0" encoding="UTF-8"?>
<!-- <?mso-application progid="Word.Document"?> -->
<wordDocument>
<body>
<sect>
<p>
<pPr>
<pStyle val="Heading1"/>
</pPr>
<r>
<t>Erste Ueberschrift</t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t><HTML></t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t> <HEAD></t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t> <BODY></t>
</r>
</p>
</sect>
</body>
</wordDocument>
===XSL:===
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://icl.com/saxon"
extension-element-prefixes="saxon"
<xsl:output
version="1.0"
method="xml"
indent="yes"
encoding="iso-8859-1"
omit-xml-declaration="no"
standalone="no"
media-type="text/xml"
/>
<xsl:strip-space elements="*"/>
<xsl:param name="replace"/>
<xsl:template match="/">
<xsl:apply-templates select="//*[not(parent::*)]"/>
</xsl:template>
<xsl:template match="*[not(parent::*)]">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | * | text() | comment()"/>
</xsl:element>
</xsl:template>
<xsl:template match="p">
<xsl:choose>
<xsl:when
test="
pPr/pStyle[(_at_)val='Heading1']
|
pPr/pStyle[(_at_)val='Programlisting']
"
>
<xsl:if test="pPr/pStyle[(_at_)val='Heading1']">
<title>
<xsl:value-of select="r/t"/>
</title>
</xsl:if>
<xsl:if test="pPr/pStyle[(_at_)val='Programlisting']">
<xsl:if
test="
count(
preceding-sibling::p[pPr/pStyle[(_at_)val='Programlisting']]
)=0
"
>
<programlisting>
<xsl:apply-templates
select="parent::*/p[pPr/pStyle[(_at_)val='Programlisting']]"
mode="get_it"
/>
</programlisting>
</xsl:if>
</xsl:if>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="p[pPr/pStyle[(_at_)val='Programlisting']]"
mode="get_it">
<xsl:text>
</xsl:text>
<xsl:value-of select="normalize-space(r/t)"/>
<xsl:if
test="count(following-sibling::p[pPr/pStyle[(_at_)val='Programlisting']])=0">
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<!-- comment() | text() template -->
<xsl:template match="comment()">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="translate(., '
', '')"/>
</xsl:template>
</xsl:stylesheet>
===OUTPUT:===
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<wordDocument>
<title>Erste Ueberschrift</title>
<programlisting>
<HTML>
<HEAD>
<BODY>
</programlisting>
</wordDocument>
--- Silvia Liberto <SLiberto(_at_)gmx(_dot_)de> wrote:
hello again,
have someone an idea for my problem?
i don´t know where the mistake is?
i have another solution, without keys, but it doesn´t works too!?
Maybe its a small thing!?
can someone give me a tip?
Thanks!
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="p">
<programlisting>
<xsl:call-template name="prog"/>
</programlisting>
</xsl:template>
<xsl:template match="r">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template name="prog">
<xsl:for-each
select="following-sibling::p[pPr/pStyle/@val='Programlisting']">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Hi Wendell and all,
thanks for helping, i know what you mean when you say i should
try a
simpler
solution, but i need this key! ;-)
so i have changed my syntax on the @use attribute for
Programlisting.
generate-id(preceding-sibling::p[pPr/pStyle/@val='Heading1'][1])
but it still doesn´t works!? i have no grouping effect?
i can´t find the reason, have you another idea?
the output shoud be like this:
<programlisting>
<HTML>
<HEAD>
<BODY>
</programlisting>
<xsl:key name="prog" match="p[pPr/pStyle/@val='Programlisting']"
use="generate-id(preceding-sibling::p[pPr/pStyle/@val='Programlisting'][1])"/>
<xsl:template match="p">
<xsl:choose>
<xsl:when test="pPr/pStyle/@val='Heading1'">
<title>
<xsl:value-of select="r/t"/>
</title>
</xsl:when>
<xsl:when test="pPr/pStyle/@val='Programlisting'">
<programlisting>
<xsl:for-each select="key('prog',generate-id())">
<xsl:value-of select="r/t"/>
</xsl:for-each>
</programlisting>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!--<?mso-application progid="Word.Document"?>-->
<wordDocument>
<body>
<sect>
<p>
<pPr>
<pStyle val="Heading1"/>
</pPr>
<r>
<t>Erste Ueberschrift</t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t><HTML></t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t> <HEAD></t>
</r>
</p>
<p>
<pPr>
<pStyle val="Programlisting"/>
</pPr>
<r>
<t> <BODY></t>
</r>
</p>
</sect>
</body>
</wordDocument>
--
Telefonieren Sie schon oder sparen Sie noch?
NEU: GMX Phone_Flat http://www.gmx.net/de/go/telefonie
--~------------------------------------------------------------------
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--
DSL-Aktion wegen großer Nachfrage bis 28.2.2006 verlängert:
GMX DSL-Flatrate 1 Jahr kostenlos* http://www.gmx.net/de/go/dsl
--~------------------------------------------------------------------
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--
DSL-Aktion wegen großer Nachfrage bis 28.2.2006 verlängert:
GMX DSL-Flatrate 1 Jahr kostenlos* http://www.gmx.net/de/go/dsl
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--