[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Merging changes via ID
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|