|
Subject: RE: [xsl] Paragraphs in Word XML From: "Kaila Kaarle" <Kaarle.Kaila@xxxxxxx> Date: Fri, 6 Jan 2006 10:56:47 +0200 |
Hi again,
To follow up this thread I'll tell you how I finally succeeded in this. As
Michael said it was a tough one.
I did the transformation in two steps. If I understand correctly it could not
be done with plain XSLT 1.0 but libsxlt has the <xsl:document> element from
XSLT 1.1 that I needed and this is available in other engines too.
1. First I created a temporary file as this:
<xsl:document href="tmp.xml">
<dict>
<entry>
<xsl:call-template name="raport" />
</entry>
</dict>
</xsl:document>
2. Here I created the result without any <p> elements but with
<w:pPr>
<w:pStyle w:val="TableHeader"/>
</w:pPr>
(Paragraph style definition) at the beginning of every paragraph
3. Then I read the data into the document using
<xsl:apply-templates select="document('tmp.xml')"/>
4. In this I used transformations using method by David Carlisle from
http://www.biglist.com/lists/xsl-list/archives/200510/msg00089.html
To add the <p> element in the right places.
I could not solve without using tmp.xml.
So great thanks for Michael and David and for this great list.
Regards
Kaarle
-----Original Message-----
From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
Sent: 4. tammikuuta 2006 17:06
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] Paragraphs in Word XML
This is a tough one but similar problems have been solved on this list
before!
I think the design in outline is this: if you encounter a table that has a
break element within it, you need to apply a template/function that splits it
into two: everything before the break, and everything after the break; you
then apply the same processing recursively to "everything after the break" in
case there are multiple breaks.
The processing is a template rule that takes the break element as a parameter.
When processing an element that is an ancestor of the break element, create a
shallow copy of yourself containing deep copies of all your pre-break
children; then apply templates recursively to the child that's an ancestor of
the break element, then create a shallow copy of yourself containing deep
copies of all your post-break children.
Hope that makes sense, I don't have time to translate it into code!
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Kaila Kaarle [mailto:Kaarle.Kaila@xxxxxxx]
> Sent: 04 January 2006 13:52
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Paragraphs in Word XML
>
> Hello,
>
> I have an xml file containing the data for my genealogical report. It
> contains table elements and section elements and within sections there
> are person - relation and notices elements.
> Notices elements contain notice elements with information such as
> birth dates and places but also long texts about what the person did.
> The text is divided into para elements and some of them must be
> written into separate paragraps in the output.
>
> Word XML requires that <body> element contains <p>
> (paragraph) elements. When I use XSTL to create my document I would
> usually transform one section in my XML into a <p> element in Word
> XML. But if the text contains paragraph marks I need to fininsh the
> current Word paragraph and start a new one (with a different style)
> but I don't know if I can do that in XSLT.
>
> I'll add an example at the end of this message of my xml.
>
> My xml looks like this: All of it should go to one pargraph if the
> <notice tag="NOTE"> would not contain the <para type="NEW"> element.
> The rest of the text should go to the second paragraph.
>
> How can I split the text in the example into two different elements on
> output???
> Regards
> Kaarle
>
> <tables>
> <table number="1">
> <section type="MAIN" gen="1">
> <person sex="M" unitid="I1" source="1">
> <name>
> <givenname>Paavo</givenname>
> <surname>Kaila</surname>
> </name>
> <notices>
> <notice tag="BIRT" text="Syntynyt">
> <date value="18840413">13.04.1884</date>
> <place name="Vimpeli">Vimpeli</place>
> </notice>
> <notice tag="DEAT" text="Kuollut">
> <place name="Lappeenranta">Lappeenranta</place>
> </notice>
> <notice tag="OCCU">
> <para>Bonde</para>
> <place name="Esse">Esse</place>
> </notice>
> <notice tag="NOTE">
> <para>Paavo oli isdni isd. Hdn meni Evan kanssa
> naimisiin mutta oli hdnelld pari kolme muutakin vaimoa. Heitd en ole
> tavannut vaikka viimeinen kuoli vasta muutama vuiosi sitten.
> </para>
> <para type="NEW">Lisdsin tdhdn vield tdllaisen toisen
> tekstikappaleen. Word-xml testi on nyt testattavana ja siindkin
> pitdisi saada kappaleet paikoilleen. Muuten homma ei oikein suju.
> Myvskin olisi hyvd jos tdmd jatkuisi useammalle riville. Ehkd se jo on
> ohittanut ekan rivin loppusarakkeen.</para>
> </notice>
> <notice tag="PHOT">
> <media name="P1R7.jpg" number="1">Tdmd on Paavo</media>
> </notice>
> </notices>
> <relation type="SPOU" number="1" source="2">
> <event type="MARR">
> <date value="1907">1907</date>
> <place name="Tammerfors">Tammerfors</place>
> </event>
> <person sex="F" unitid="I2">
> <name>
> <givenname>Eva Charlotta</givenname>
> <surname>Koskinen</surname>
> </name>
> <notices>
> <notice tag="NAME">
> <name>
> <givenname>Eva Charlotta</givenname>
> <surname>Kaila</surname>
> </name>
> </notice>
> <notice tag="BIRT" text="Syntynyt" source="3">
> <date value="18920422">22.04.1892</date>
> <place name="Tammela">Tammela</place>
> </notice>
> <notice tag="DEAT" text="Kuollut">
> <date value="19640406">06.04.1964</date>
> <place name="Helsinki">Helsinki</place>
> </notice>
> </notices>
> </person>
> </relation>
> </person>
> </section>
> </table>
> </tables>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Paragraphs in Word XML, Kaila Kaarle | Thread | [xsl] XSLT2.0 modes, Soren Kuula |
| Re: [xsl] media-type setting in Jav, Geert Josten | Date | RE: [xsl] media-type setting in Jav, Michael Kay |
| Month |