problem mit xsl:copy-of
anpeter
- xsl
0 Thomas J.S.0 Andreas
Hallo Forum,
seit geraumer Zeit plage ich mich mit folgendem Problem herum:
Meine Quell-Datei sieht folgendermaßen aus:
<block>
<h1>Mit gesunden Fuessen laeuft es besser</h1>
<p>Bei der Arbeit, bei der Freizeit, beim Spoert - wir sind taeglich auf unsere Fuesse
angewiesen. Aber nicht immer versehen sie ihre Arbeit oehne Proebleme. Schoen geringfuegige
Unregelmaessigkeiten wie Druckstellen, Huehneraugen, durchgetretene Fuesse, Zehenfehlstellungen
oeder entzuendete Ballen schraenken unser Woehl-"ergehen" betraechtlich ein. Doech muessen wir
diese keineswegs als schicksalsbedingt hinnehmen, denn die Behandlung voen angeboerenen
und erwoerbenen Erkrankungen, Fehlstellungen und Verletzungen des Fusses hat in den letzten
Jahren in der Medizin deutlich an Bedeutung gewoennen - auch weil voellig neue Verfahren
entwickelt wurden, die es erlauben, selbst scheinbar "hoeffungsloese" Faelle oeptimal zu
versoergen. Dr. Woelbert zeigt in seinem Voertrag Moeglichkeiten auf, wie mit und oehne
Operatioen Fussproebleme wirksam gelindert, koerrigiert und geheilt werden koennen.</p>
<kursinfo>
<tr>
<referent>
<refname>Seminar mit Hans Wurscht</refname>
</referent>
</tr>
<tr>
<tag>Do</tag>
<datum>12.06.07</datum>
<uhrzeit>15:00 - 16:30 Uhr</uhrzeit>
<kursnr>Kurs-Nr.: </kursnr>
<nr>10</nr>
<beitrag></beitrag>
</tr>
<tr>
<tag>Fr</tag>
<datum>13.06.07</datum>
<uhrzeit>14:00 - 15:30 Uhr</uhrzeit>
<kursnr>Kurs-Nr.: </kursnr>
<nr>90</nr>
<beitrag></beitrag>
/tr>
<tr>
<tag>Sa</tag>
<datum>13.06.07</datum>
<uhrzeit>14:00 - 15:30 Uhr</uhrzeit>
<kursnr>Kurs-Nr.: </kursnr>
<nr>68</nr>
<beitrag></beitrag>
</tr>
<tr>
<tag>So</tag>
<datum>13.06.07</datum>
<uhrzeit>14:00 - 15:30 Uhr</uhrzeit>
<kursnr>Kurs-Nr.: </kursnr>
<nr>50</nr>
<beitrag>10 Euro</beitrag>
</tr>
<tr>
<tag>Mo</tag>
<datum>13.06.07</datum>
<uhrzeit>14:00 - 15:30 Uhr</uhrzeit>
<kursnr>Kurs-Nr.: </kursnr>
<nr>35</nr>
<beitrag></beitrag>
</tr>
<tr>
<zusatz>
<zusatztext>blabla hier kommt noch zusätzlicher Text hinein, wie z.B. Handtücher mitbringen usw.</zusatztext>
</zusatz>
</tr>
</kursinfo>
</block>
Ich habe eine Variable in einer XSL-Datei daklariert, worüber die Zeilen ausgezählt werden sollen. Dies sieht folgendermaßen aus:
<xsl:variable name="countlines">
<xsl:copy-of select="block" />
<xsl:value-of select="string-length(/) - string-length(translate(/,'
',''))"/>
</xsl:variable>
Ich schaffe es einfach nicht, dass mir alle Zeilen zwischen <block>...</block> ausgezählt werden.
Vielen Dank für die Hilfe.
Andreas
Hallo,
Ich habe eine Variable in einer XSL-Datei daklariert, worüber die Zeilen ausgezählt werden sollen. Dies sieht folgendermaßen aus:
<xsl:variable name="countlines">
<xsl:copy-of select="block" />
Wozu kopierst du das Element in die Ariable hinen?
<xsl:value-of select="string-length(/) -
Das / bringt genau nichts.
Ich schaffe es einfach nicht, dass mir alle Zeilen zwischen <block>...</block> ausgezählt werden.
<xsl:variable name="countlines" select="string-length(//text()) - string-length(translate(//text(),'
',''))">
Wird aber vermutlich trotzdem ein falsches Ergebnis liefern, weil auch die Zeilenumbrüche zwischen den Elementen zählen (es sei denn du hast ein DTD, wo geregelt ist, welche Elemente nur andere Elemente als Inhalt haben können)
Grüße
Thomas
Hallo,
Ich habe eine Variable in einer XSL-Datei daklariert, worüber die Zeilen ausgezählt werden sollen. Dies sieht folgendermaßen aus:
<xsl:variable name="countlines">
<xsl:copy-of select="block" />Wozu kopierst du das Element in die Ariable hinen?
<xsl:value-of select="string-length(/) -
Das / bringt genau nichts.
Ich schaffe es einfach nicht, dass mir alle Zeilen zwischen <block>...</block> ausgezählt werden.
<xsl:variable name="countlines" select="string-length(//text()) - string-length(translate(//text(),'
',''))">
Wird aber vermutlich trotzdem ein falsches Ergebnis liefern, weil auch die Zeilenumbrüche zwischen den Elementen zählen (es sei denn du hast ein DTD, wo geregelt ist, welche Elemente nur andere Elemente als Inhalt haben können)
Grüße
Thomas
Hallo Thomas,
ich will den gesamten Inhalt des Elements <block> mit allen Nachfahren innerhalb der <block>-Elemente kopieren, damit ich anschließend die Zeilen auszählen kann und den Wert, der in der Variable steht, anschließend weiter verwenden kann. Ist der Gedanke falsch? Eine DTD habe ich bislang noch nicht, kommt aber noch :-)
Das "/" berücksichtigt doch die gesamte Zeichenzahl!?!
Vielen Dank für die Hilfe,
Andreas
Hallo,
<xsl:variable name="countlines" select="string-length(//text()) - string-length(translate(//text(),'
',''))">
ich will den gesamten Inhalt des Elements <block> mit allen Nachfahren innerhalb der <block>-Elemente kopieren, damit ich anschließend die Zeilen auszählen kann und den Wert, der in der Variable steht, anschließend weiter verwenden kann. Ist der Gedanke falsch?
Jain, er ist flasch, weil du dazu nicht das Element zu kopieren brauchst (darfst).
Das "/" berücksichtigt doch die gesamte Zeichenzahl!?!
Nein, das "/" selektiert das 'document root' (nicht zu verwechseln mit dem Root- oder Wurzelelements).
D.h. auf den kopierten Inhalt kannst du damit nicht zugreifen, würdest du das versuchen, würdest du unter XSLt 1.0 einen Fehler bekommen, weil da keine temporäre Bäume (was der in die Variable kopierter Inhalt ist) verwendet werden können.
Zweitens, du hast zwar - unabhängig davon, was du in die variable kopiert hast - auf den Inhalt von <block> zugegriffen, aber als ergebnis, steht dann nicht nur eine Zahl in der Variable ($countlines) sondern auch der gesamter Textinahlt von <bock> (weil du es ja hineinkopiert hast).
Bei deinem Beispiel zu bleiben, du kannst natürlich auch "/" verwenden:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="countlines" select="string-length(/) - string-length(translate(/,'
',''))" />
<xsl:template match="/">
<xsl:value-of select="$countlines" />
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas