php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 27-02-2006, 12:43
ratio-x
 Newbie
Links : Onlinestatus : ratio-x ist offline
Registriert seit: Feb 2006
Beiträge: 5
ratio-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard XML/XSL-Problem mit verschachtelten Absätzen

Hallo zusammen,

mein Problem ist wahrscheinlich ein alter Hut, ich hatte auch mal einen Beitrag dazu gefunden, kann ihn aber leider nicht mehr finden. Vielleicht weiß aber jemand einen Rat dazu oder ein Stichwort, unter dem ich suchen kann:

Ich habe eine XML-Datei mit verschachtelten Absätzen, welche nur Text beinhalten. Es kann vorkommen, daß vor und/oder nach den Child-Elementen Text steht. Also z.B:

-------------------------------------------------------
<ABSATZ NAME="Grundlagen">

Text vor den Unterabschnitten

<ABSATZ NAME="Technisches">
technischer Text
</ABSATZ>

<ABSATZ NAME="Rechtliches">
rechtlicher Text
</ABSATZ>

Text nach den Unterabschnitten

</ABSATZ>
-------------------------------------------------------

Mein Problem ist nun, daß bei der Verarbeitung durch XSL-Templates der Text vor und nach den Unterabschnitten zusammengefaßt und so ausgegeben wird, was natürlich nicht erwünscht ist. Hier der Code aus der XSL-Datei:

-------------------------------------------------------
<h2>Inhalt</h2>

<xsl:for-each select="//DOC//ABSATZ">
<h4>

<xsl:number format="1.1." level="multiple" count="ABSATZ" />
<xsl:text> </xsl:text>
<xsl:value-of select="@NAME" />

</h4>

<xsl:apply-templates />
<xsl:value-of select="." />

</xsl:for-each>
-------------------------------------------------------

Ich ahne, daß das Problem in dem Bereich xsl:apply-templates/xsl:value-of select="." liegt. Wie muß ich das anordnen, damit der Text und die Abschnitte gemäß der Struktur des XML-Dokuments ausgegeben werden? Hat jemand eine Idee?
Mit Zitat antworten
  #2 (permalink)  
Alt 27-02-2006, 13:18
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Bin mir nicht ganz sicher, ob ich das Problem richtig verstehe, aber probiert mal das:
Code:
<!-- Das "Einstiegs"-Template -->
<xsl:template match="/*">
Trullala und Hallo
  <xsl:apply-templates/>
</xsl:template>


<xsl:template match="ABSATZ">
  <!-- Dieser Teil ist ganz wie bei dir -->
  <h4>
    <xsl:number format="1.1." level="multiple" count="ABSATZ" />
    <xsl:text> </xsl:text>
    <xsl:value-of select="@NAME" />
  </h4>

  <!-- @select ist deinem Fall wohl optional -->
  <xsl:apply-templates select="ABSATZ"/>
</xsl:template>
Dein Ansatz mit xsl:apply-templates ging also schon in die richtige Richtung.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #3 (permalink)  
Alt 27-02-2006, 15:43
ratio-x
 Newbie
Links : Onlinestatus : ratio-x ist offline
Registriert seit: Feb 2006
Beiträge: 5
ratio-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Nezzar,

danke für Deine Antwort, aber leider funktioniert das nicht. Die Variante mit <xsl:for-each select="//DOC//ABSATZ"> habe ich deshalb versucht, weil ich in der gleichen XSL-Datei bereits ein Template habe, welches auf "ABSATZ" matcht, um ein automatisches Inhaltsverzeichnis zu erstellen. Funktioniert auch ganz prima.

----------------------------------------------------------------------------

<xsl:template match="ABSATZ">

<ul class="gliederung">
<li>
<a>

<xsl:attribute name="href">#gl<xsl:number level="any" count="ABSATZ" format="1" /></xsl:attribute>
<xsl:number level="multiple" count="ABSATZ" format="1.1." />
<xsl:text> </xsl:text>
<xsl:value-of select="@NAME" />
</a>
</li>

<xsl:apply-templates select="ABSATZ" />

</ul>
</xsl:template>

----------------------------------------------------------------------------

Dafür ist nun aber die Möglichkeite eines <xsl:template match="ABSATZ"> verbraucht, oder?

Nachdem ich - für meine laienhaften Anfängerversuche - aber nun schon so sensationell ein Inhaltsverzeichnis hinbekommen habe, hätte ich gerne auch noch den Inhaltstext ordentlich ausgegeben.

ps: Wie kann ich hier Code-Schnipsel als solche markieren?
Mit Zitat antworten
  #4 (permalink)  
Alt 01-03-2006, 15:30
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Verstehe. Das macht das ganze natürlich ein wenig komplizierter.
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #5 (permalink)  
Alt 01-03-2006, 15:40
Benutzerbild von Nezzar Nezzar
 wannabe batard
Links : Onlinestatus : Nezzar ist offline
Registriert seit: Mar 2002
Beiträge: 477
Nezzar ist zur Zeit noch ein unbeschriebenes Blatt
Nezzar eine Nachricht über ICQ schicken
Standard

Verstehe. Das macht das ganze natürlich ein wenig komplizierter.

Vielleicht kannst du folgendes probieren: (erscheint mir nicht ganz sauber, aber mir fällt leider gerade nicht's besseres ein)

Code:
<xsl:template match="ABSATZ">
  <xsl:param name="ShowContents"/>

  <xsl:choose>
    <xsl:when test="$ShowContents = 1">
      <xsl:value-of select="@NAME"/><br/>
      <xsl:value-of select="."/>

      <xsl:apply-templates select="ABSATZ">
        <xsl:with-param name="ShowContents">1</xsl:with-param>
      </xsl:apply-templates>
    </xsl:when>
    <xsl:otherwise>
      <!-- Der Teil ist jetzt genau wie bei dir -->
      <ul class="gliederung">
        <li>
          <a>

            <xsl:attribute name="href">#gl<xsl:number level="any" count="ABSATZ" format="1" /></xsl:attribute>
            <xsl:number level="multiple" count="ABSATZ" format="1.1." />
            <xsl:text> </xsl:text>
            <xsl:value-of select="@NAME" />
          </a>
        </li>

        <xsl:apply-templates select="ABSATZ" />

      </ul>
    </xsl:otherwise>
  </xsl:choose>

</xsl:template>
PS: Zum Thema Code markieren, siehe hier: http://php-resource.de/forum/misc.ph...on=bbcode#code

Edit: Den Beitrag über diesen einfach ignorieren, habe versehentlich Alt+S gedrückt (warum kann ich eigentlich meine eigenen Postings nicht löschen?).
__________________
"Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender
Mit Zitat antworten
  #6 (permalink)  
Alt 01-03-2006, 16:37
ratio-x
 Newbie
Links : Onlinestatus : ratio-x ist offline
Registriert seit: Feb 2006
Beiträge: 5
ratio-x ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Nezzar,

vielen Dank! Das hat mich schon viel weiter gebracht. Jetzt ist das erste Problem gelöst, d.h. ich kann die Gliederung und den Inhalt in einem XSL-Template abarbeiten und somit auf einer Seite darstellen. Deine Lösung finde ich im übrigen gar nicht so unelegant.

Hast Du noch eine Idee zum ursprünglichen Problem, nämlich daß bei der Verschachtelung der gesamte Elementinhalt vor den Child-Elementen dargestellt wird, auch wenn er teilweise erst danach kommen soll?

Besten Dank
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

Newsmanager

Der Newsmanager ist ein Newssystem und Newsletter in einem. Mit WYSIWYG Editor und E-Mail import aus einer bestehenden MySql Datenbank sowie dynamische Kategorien / Themen Filter.

11.09.2019 Stephan_1972 | Kategorie: PHP/ News
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

11.09.2019 Stephan_1972 | Kategorie: PHP/ Webservice
ContentLion - Open Source CMS ansehen ContentLion - Open Source CMS

ContentLion ist ein in PHP geschriebenes CMS, bei dem man Seiten, Einstellungen usw. in Ordnern lagern kann

22.08.2019 stevieswebsite2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:54 Uhr.