|
Subject: Re: [xsl] Merging changes via ID From: Michael Ludwig <milu71@xxxxxx> Date: Mon, 22 Jun 2009 23:37:04 +0200 |
Lech R. schrieb am 22.06.2009 um 18:13:24 (+0100):
> Or maybe I'm just tired.
Hi Lech,
in that case, more pivo is required !!!
> I want the new file to reflect the structure of the updated, English
> file and have the text content of the translated one. The XML files
> are derived from Docbook.
Okay, I guess the structure is the sequence of /*/*[@xml:id] - so
everything with an ID at level 2.
> So, to begin, I've created the following:
>
> <xsl:template match="*[@xml:id]">
> <xsl:copy-of
> select="document('doc2.xml')//*[@xml:id=document('doc1.xml')//@xml:id]"/>
> </xsl:template>
Note there is a nifty idiom: document('bla.xml#gurke') selects the
element node with ID "gurke" out of document "bla.xml".
Also, the id() function might come in handy.
> My worries:
> the recursion is from top to bottom, so what if there are changes
> below and the tempate matches the whole tree at the top?
> It matched on ID but what about the changes for inline elements below
> block level that don't have an ID? Would it make processing more
> simple were I to generate IDs for them or should I process and match
> them as descendant of a given ID of a block?
> Other worries such as removed, added element, I've already taken care
> of those.
I'm not sure I understand all of this. Take a look at the following,
maybe this is helpful, maybe not:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="doc2" select="'lech-xmlid.pl.xml'"/>
<!-- elements with ID below document element -->
<xsl:template match="/*/*[@xml:id]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="document( concat( $doc2, '#', @xml:id))"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Note this leaves an unmatched <section xml:id="s02"/> in the output,
If you don't want that, it could be avoided quite easily.
<?xml version="1.0"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="SAMPLE_EN">
<info xml:id="intro"><info xml:id="intro">
<title>Wprowadzenie do Docbook</title>
</info></info>
<section xml:id="s01"><section xml:id="s01">
<title>Formatowanie i Obrazki</title>
<para>Oto przyklad ze <oXygen/> moze byc uzwany do
edycji dokumentow zgodnych z dockbookx.dtd.</para>
<para>Aby obejrzec te instrukcje w przegladarce WWW, wybierz
nastepujacy scenariusz transformacji:
<code>Docbook HTML</code>.
</para>
</section></section>
<section xml:id="s02"/>
<section xml:id="s04"><section xml:id="s04"><title>Przyklad
zagniezdzania</title>
<para>Aby zilustrowac problemy z zagniezdzaniem.</para>
</section></section>
</article>
Best,
Michael Ludwig
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Merging changes via ID, Lech Rzedzicki | Thread | Re: [xsl] Merging changes via ID, Michael Ludwig |
| [xsl] Merging changes via ID, Lech Rzedzicki | Date | Re: [xsl] Merging changes via ID, Michael Ludwig |
| Month |