Skapa bra filtrering från XML-dok via XSLT?? hur gör man bäst...

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2008-01-22 16:33

Nedanstående taggade dokument skull jag vilja filtrera via XSLT om det går istället för att kör asök/ersätt i xml-editor. Hur gör man då? dvs ta bort tabbar i xml-dok, ta bort onödiga <p> samt </p>-taggar och lägg som ett xml-dok som exempel 2 visar nedanför...
taggat dok:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css"?>
<Word-Document xmlns:HTML="http://www.w3.org/Profiles/XHTML-transitional">
<Rubrik1>
<p>2. Generella riktlinjer</p>
</Rubrik1>
<Rubrik2>
<p>2.1 Fördröjande arbeten</p>
</Rubrik2>
<Brödtext>
<p>Inledningsvis kraftsamlas fördröjande arbeten till infallsportar (större hamnar och flygplatser samt vissa vägar över landgräns). </p>
<p>Efterhand förbereds fördröjande arbeten främst på och längs prioriterade vägar.</p>erade fördröjande fältarbeten. </p>
<p>Rätt personer rapporterar till närmast högre chef, när den ansvarige chefen inte beordrat direkt rapportering. Rapportering görs när arbetena påbörjas och slutförs, vid behov även resultaten.</p>
<p>Åtgärder vidtas för att varna i tid. (se kapitel Varningsåtgärder).</p>
</Brödtext>
<Rubrik2>
<p>2.2 Fördröjande fältarbeten vid direkt understöd av strid</p>
</Rubrik2>
<Brödtext> Mer text inom detta område, bla bla bla bla bla bla...
</Word-Document>

Så här skulle jag vilja att det ser ut med någon form av XSLT påhängt om det går?? Se exempel nedanför detta stycke text. Jag har precis börjat med XSLT men det tar lång tid att förstå alla funktioner för filtrering. Där för tänkte jag att någon smart person här vet hur man gör!

Exempel 2, Färdigt dok:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css"?>
<Word-Document xmlns:HTML="http://www.w3.org/Profiles/XHTML-transitional">
<Rubrik1>
2. Generella riktlinjer
</Rubrik1>
<Rubrik2>
2.1 Fördröjande arbeten
</Rubrik2>
<Brödtext>
Inledningsvis kraftsamlas fördröjande arbeten till infallsportar (större hamnar och flygplatser samt vissa vägar över landgräns).
Efterhand förbereds fördröjande arbeten främst på och längs prioriterade vägar.erade fördröjande fältarbeten.
Rätt personer rapporterar till närmast högre chef, när den ansvarige chefen inte beordrat direkt rapportering. Rapportering görs när arbetena påbörjas och slutförs, vid behov även resultaten.
Åtgärder vidtas för att varna i tid. (se kapitel Varningsåtgärder).
</Brödtext>
<Rubrik2>2.2 Fördröjande fältarbeten vid direkt understöd av strid</Rubrik2>
<Brödtext> Mer text inom detta område, bla bla bla bla bla bla...
</Word-Document>

Hejsan!

Här är ett exempel som gör det du simulerat om jag förstod problemet korrekt.
Vill du ha ett radbyte där du förut haft en </p> kan du sätta till det med:

<xsl:text>&# 10;</xsl:text>

(ta bort mellanslaget före 10) inne i templaten som matchar <p>, efter apply-templates.

Hoppas det hjälper dej att komma igång

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    
    
    <xsl:template match="processing-instruction()">
        <xsl:copy/>
    </xsl:template>
    
    
    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    
    <xsl:template match="p">
        <xsl:apply-templates/>
    </xsl:template>

    
    <xsl:template match="text()">
        <xsl:value-of select="normalize-space(.)"/>
    </xsl:template>
</xsl:stylesheet>
  • Medlem
  • Stockholm
  • 2008-01-23 16:45

Tack för svaret

Det fungerade bra med denna XSLT-fil men tanken är att som sagt plocka bort <p> och </p> taggar men behålla alla övriga taggar för att koppla o få det att fungera mot format i Indesign CS3.
Problemet från början för mig är att kunden har en wordfil som jag konverterar till xml utifrån wordfilen. Det som finns med är då:

<Rubrik2>
<p>2.1 Fördröjande arbeten</p>
</Rubrik2>
<Brödtext>
<p>Inledningsvis kraftsamlas fördröjande arbeten till infallsportar (större hamnar och flygplatser samt vissa vägar över landgräns). </p>
<p>Efterhand förbereds fördröjande arbeten främst på och längs prioriterade vägar.</p>erade fördröjande fältarbeten. </p>
<p>Rätt personer rapporterar till närmast högre chef, när den ansvarige chefen inte beordrat direkt rapportering. Rapportering görs när arbetena påbörjas och slutförs, vid behov även resultaten.</p>
<p>Åtgärder vidtas för att varna i tid. (se kapitel Varningsåtgärder).</p>
</Brödtext>

Det jag vill ha kvar är följande:
<Rubrik2>2.1 Fördröjande arbeten</Rubrik2>
<Brödtext>Inledningsvis kraftsamlas fördröjande arbeten till infallsportar (större hamnar och flygplatser samt vissa vägar över landgräns). Efterhand förbereds fördröjande arbeten främst på och längs prioriterade vägar.</p>erade fördröjande fältarbeten. Rätt personer rapporterar till närmast högre chef, när den ansvarige chefen inte beordrat direkt rapportering. Rapportering görs när arbetena påbörjas och slutförs, vid behov även resultaten. Åtgärder vidtas för att varna i tid. (se kapitel Varningsåtgärder).
</Brödtext>

– Dvs rensa de <p> och </p>-taggar som följer med samt eventuella tabbindrag som följer med vid konvertering till XML, dvs det blir tabbar som skapar indrag för att visa struktur på xml-koden antingen 1 eller 2 stycken tabbstopp. De ska bort men samtidigt spara de viktiga taggarna såsom <Rubrik 2> samt andra grundtaggar som omgärdar de texter som ska formateras senare.det genererar dock tabbar som följer med formatmallarna när de typograferar den xml-taggning som ligger med varje textdel i texten olyckligtvis för Indesign.
Förstår du vad jag menar?
tack för den fina XSLT-filen den fungerar fullt ut men tar även bort taggarna visuellt som gör att all formatering blir likadan i Indesign Cs3 dessvärre

Mvh Mike:D

Ursprungligen av migulu:

Förstår du vad jag menar?
tack för den fina XSLT-filen den fungerar fullt ut men tar även bort taggarna visuellt som gör att all formatering blir likadan i Indesign Cs3 dessvärre

Om jag förstått rätt är det alltså bara <p> elementena samt tabbarna som ska tas bort? Precis detta gör scriptet jag skrev, allt annat behålls

Ifall du inte ser några taggar överhuvudtaget så är det nog nån fel med din konvertering. Jag rekommenderar t.ex. oXygen XML editor som är enkel att använda (den kostar, men man kan använda trial i 30 dagar).

Vill du köra konversioner från terminalen rekommenderar jag att du installerar xsltproc från macports. Då är en konversion så enkel som:

xsltproc -o <utfilnamn> <xslfilnamn> <infilnamn>

xsltproc är förinstallerat åtminstone med Tiger.

1
Bevaka tråden