Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

xslt - prosba o pomoc

18 views
Skip to first unread message

rleg...@gmail.com

unread,
Jun 18, 2013, 5:00:06 PM6/18/13
to
Witam,
mam nastepujacy dokument XML (ksiazka)
<book>
<t p="1">Tytul <i>rozdzialu</i></t>
<t p="2">Podtytul rodzialu</t>
<item nr="1">
Paragraf 1
</item>
<item nr="2">
Paragraf 2
</item>
itd
</book>

Chcialbymzmodyfikowac plik XML tak, aby dodac do tytulow najblizszy "nr" z "item"
napisalem plik XSLT:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="copy.xslt"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="no" indent="yes" media-type="text/xml"/>

<xsl:template match="t">
<xsl:copy><xsl:copy-of select="@*"/>[<xsl:value-of select="following-sibling::item/@nr"/>] <xsl:value-of select="."/></xsl:copy>
</xsl:template>
</xsl:stylesheet>

Otrzymuje:

<t p="1">[1] Tytul rozdzialu</t>

a chcialbym uzyskac:

<t p="1">[1] Tytul <i>rozdzialu</i></t>

czyli gubie znaczniki kusywy.
Jak poprawic moj plik XSLT, ewentualnie moze trzeba wszystko zmienic?
Jesli mozna, to prosze o cos dokladnego, bo nie jestem zadnym specjalista.

Pozdrawiam
Robert
PS
uzywam msxml, a plik "copy.xslt" jest nastepujacy:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node( ) | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node( )"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>



rleg...@gmail.com

unread,
Jun 19, 2013, 3:59:22 AM6/19/13
to
Na razie poradzilem sobie w ten sposob:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="copy.xslt"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="no" indent="no" media-type="text/xml"/>
<xsl:template match="t">
<xsl:element name="t">
<xsl:attribute name="p"><xsl:value-of select="@p"/></xsl:attribute>[<xsl:value-of select="following-sibling::item/@nr"/>] <xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
problem pojawi sie, gdy bedzie wiecej atrybutow, a jeszcze gorzej, gdy nie bede wiedzial o jakims.

Ale mam teraz wiekszy problem ze spacjami, mianowicie ma np. paragraf:
<item nr="47">
<p class="pl">47. Et iterum: <i>Haereticum hominem post primam correptionem devita</i>,<span class="prz"> {[b Non pauci mss., <i>sciens quia perversus est</i>. Et infra unus, <i>proprio vitio damnatus</i>.]}</span> <i>sciens quia subversus est qui ejusmodi est, et delinquit, cum sit proprio judicio damnatus</i></p>
</item>

po transformacji GINIE mi SPACJA miedzy "</span>" a "<i>", czyli otrzynuje "</span><i>" Jak ja odzyskac, co zmienic? Bo w przypadku ksiazki jest to nie do przyjecia.

Pozdrowienia
Robert

szomiz

unread,
Jun 19, 2013, 5:43:45 AM6/19/13
to
Uzytkownik <rleg...@gmail.com> napisal w wiadomosci
news:068ccafa-64a8-46e7...@googlegroups.com...
Dlaczego:
> <xsl:import href="copy.xslt"/>
a nie:
<xsl:include href="copy.xslt"/>
?

sz.


rleg...@gmail.com

unread,
Jun 22, 2013, 4:46:52 PM6/22/13
to
W dniu środa, 19 czerwca 2013 11:43:45 UTC+2 użytkownik szomiz napisał:
> Uzytkownik <rl...@gmail.com> napisal w wiadomosci
Myslalem, ze koncowy efekt jest ten sam. Po zamianie dalej bez spodziewanego efektu.

Jezeli chodzi o spacje, znalazlem dwa rozwiazania:
1. w pliku xslt umiescic:
<xsl:preserve-space elements="*"/>
- to dla mnie byloby lepsze rozwiazanie, ale nie zadzialalo.
2. w pliku xsl umiescic
<book xml:space="preserve">
- to zadzialalo, ale minus jest taki, ze musze ingerowac we wszystkie pliki xml, czego chcialbym uniknac.

Podsumowaujac, dalej,
1. Nie wiem, dlaczego nie dziala <xsl:preserve-space elements="*"/> w pliku xslt
2. nie wiem jak przeksztalcic xml w xml zmieniajac zawartosc ale zachowujac wszystkie atrybuty.

Pozdrowienia
Robert
0 new messages