XSLT Problem

ooTheDomeoo

Grünschnabel
Hallo,

ich versuche mit XSLT folgenden Knoten in HTML darzustellen:

<summary>
<p>Das ist eine Beschreibung mit folgender Aufzählung</p>
<ul>
<li>Hallo - 1</li>
<li>Hallo - 2</li>
</ul>
<p>und hier geht die beschreibung weiter .....</p>
</summary>


XSLT :
<xsl:for-each select="summary">
<p>
<xsl:for-each select="p">
<xsl:apply-templates />
</xsl:for-each>
</p>
<ul>
<xsl:for-each select="ul">
<xsl:for-each select="li">
<li>
<xsl:apply-templates />
</li>
</xsl:for-each>
</xsl:for-each>
</ul>
</xsl:for-each>


HTML - Ausgabe

Das ist eine Beschreibung mit folgender Aufzählungund hier geht die beschreibung weiter .....

Hallo - 1
Hallo - 2


Ich will aber, das die Ausgabe folgendermaßen Aussieht:


Das ist eine Beschreibung mit folgender Aufzählung

Hallo - 1
Hallo - 2

und hier geht die beschreibung weiter .....


Ist dies Möglich? Ich weis leider nicht weiter
 
Hi.

XML:
<xsl:template match="summary">
  <xsl:for-each select="./*">
    <xsl:copy-of select="." />
  </xsl:for-each>
</xsl:template>
Gruß

\edit: oder noch einfacher:
XML:
<xsl:template match="summary">
    <xsl:copy-of select="./*" />
</xsl:template>
 
Zuletzt bearbeitet von einem Moderator:
Hi,

Du könntest es auch mit Templates lösen:

XML:
<xsl:template match="summary">
   <xsl:apply-templates select="p[1]" />
   <xsl:apply-templates select="ul" />
   <xsl:apply-templates select="p[2]" />
</xsl:template>
<xsl:template match="p">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>
<xsl:template match="ul">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>
<xsl:template match="li">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>

Anstatt der <xsl:copy> kannst Du dann natürlich auch transformieren, wie Du lustig bist.

LG
 
Zuletzt bearbeitet von einem Moderator:
prima, ich werde mir das heute Abend anschauen,

das template sieht sehr Interessant aus. Einfaches kopieren der inneren Knoten würde gehen. Wie wäre das ganze aber dann, wenn ich z.B. in PDF Transformiere.


<summary>
<p>Das ist eine Beschreibung mit folgender Aufzählung</p>
<ul>
<li>Hallo - 1</li>
<li>Hallo - 2</li>
</ul>
<p>und hier geht die beschreibung weiter .....</p>
<ul>
<li>Hallo - 1</li>
<li>Hallo - 2</li>
</ul>
<p>und hier geht die beschreibung weiter .....</p>
</summary>




grüße

johannes
 
Zuletzt bearbeitet:
Hi,

lass einfach das summary-Template weg, das ist eh überflüssig, fällt mir gerade auf. Die Knoten werden ja in der Reihenfolge gematcht, in der sie auftreten.

Und achte in Deinen Beiträgen bitte auf die Rechtschreibung, wie es unsere Netiquette, Punkt 15 verlangt. Danke.

LG
 
Danke, leider kann ich das <summary> nicht weglassen. Der gesamte XML-Baum sieht so aus:

Code:
<?xml version="1.0" encoding="windows-1250"?>
<project>
  <!-- Projekt - Informationen -->
  <projectTitle>
    <name></name>
      <versions>
        <version>erste Version</version>
        <version>zweite Version</version>
      </versions>
    <datum></datum>
  </projectTitle>
  <!-- Projekt - Dokumentation -->
  <docu>
      <!-- Package - Dokumentation -->
      <package>
          <!-- Package - Informationen -->
          <info>
            <name></name>
            <summary>
              <p>Das ist eine Beschreibung mit folgender Aufzählung</p>
              <ul>
                <li>Hallo - 1</li>
                <li>Hallo - 2</li>
              </ul>
             <p>und hier geht die beschreibung weiter .....</p>
            </summary>
            <authors>
              <author></author>
              <author></author>
            </authors>
            <versions>
              <version></version>
              <version></version>
            </versions>
            <todos>
              <todo></todo>
              <todo></todo>
            </todos>
          </info>
          <!-- Package - Inhalt -->
          <content>
            <constants>
              <constant>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <def> </def>
              </constant>
              <constant>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <def> </def>
              </constant>
            </constants>
            <cursors>
              <cursor>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <def> </def>
              </cursor>
              <cursor>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <def> </def>
              </cursor>
            </cursors>
            <functions>
              <function>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <parameters>
                  <parameter></parameter>
                  <parameter></parameter>
                </parameters>
                <return></return>
                <call></call>
              </function>
              <function>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <parameters>
                  <parameter></parameter>
                  <parameter></parameter>
                </parameters>
                <return></return>
                <call></call>
              </function>
            </functions>
            <procedures>
              <procedure>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <parameters>
                  <parameter></parameter>
                  <parameter></parameter>
                </parameters>
                <call></call>
              </procedure>
              <procedure>
                <summary>
                  <ul>
                    <li></li>
                    <li></li>
                  </ul>
                </summary>
                <parameters>
                  <parameter></parameter>
                  <parameter></parameter>
                </parameters>
                <call></call>
              </procedure>
            </procedures>
          </content>
      </package>
  </docu>
</project>

Den gesamten XML-Baum möchste ich Tranformieren. Ich hatte nur die Problemstelle aus meinem Code gepickt.

Sollte ich mir evtl. noch einmal grundlegende Gedanken über meinen Aufbau machen?
 
Hi,
hast recht, ohne meine bisherigen Versuche tappst du völlig im Dunkeln.
Ich habe meine XML-Datei jetzt einmal Abgespeckt. Ich möchte mich langsam an das ganze herantasten. Zuviel Auf einmal ist für mich als Anfänger sicher nicht gut.

Die XML-Datei ist Folgende:
Code:
<?xml version="1.0" encoding="windows-1250"?>
<project>
  <!-- Projekt - Informationen -->
  <projectTitle>
    <name>Test-Projekt fuer Dokumentation</name>
      <version>1.0</version>
    <datum>August 2008</datum>
  </projectTitle>
  <!-- Projekt - Dokumentation -->
  <docu>
      <!-- Package - Dokumentation -->
      <package>
          <!-- Package - Informationen -->
          <info>
            <name>pa_test_docu</name>
            <summary>
              <p>Das Package dient zum Testen der Dokumentation mit folgenden Schwerpunkten</p>
              <ul>
                <li>Übersetzung in HTML</li>
                <li>Fehleranfälligkeit</li>
              </ul>
              <p>und hier folgen noch Informationen</p>
            </summary>
            <authors>
              <author>Johannes</author>
              <author>Max</author>
            </authors>
            <versions>
              <version>0.1 - Struktur angelegt</version>
              <version>0.2 - Implementierung</version>
            </versions>
            <todos>
              <todo>Testen</todo>
              <todo>Dokumentieren</todo>
            </todos>
          </info>
      </package>
  </docu>
</project>

Meine XSLT sieht bisher so aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="project">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="projectTitle" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="name" maxOccurs="unbounded" type="xs:string"/>
							<xs:element name="version" maxOccurs="unbounded" type="xs:decimal"/>
							<xs:element name="datum" maxOccurs="unbounded" type="xs:string"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="docu" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="package" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="info" maxOccurs="unbounded">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="name" maxOccurs="unbounded" type="xs:string"/>
													<xs:element name="summary" maxOccurs="unbounded">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="p" maxOccurs="unbounded" type="xs:string"/>
																<xs:element name="ul" maxOccurs="unbounded">
																	<xs:complexType>
																		<xs:sequence>
																			<xs:element name="li" maxOccurs="unbounded" type="xs:string"/>
																		</xs:sequence>
																	</xs:complexType>
																</xs:element>
																<xs:element name="p" maxOccurs="unbounded" type="xs:string"/>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
													<xs:element name="authors" maxOccurs="unbounded">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="author" maxOccurs="unbounded" type="xs:string"/>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
													<xs:element name="versions" maxOccurs="unbounded">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="version" maxOccurs="unbounded" type="xs:string"/>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
													<xs:element name="todos" maxOccurs="unbounded">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="todo" maxOccurs="unbounded" type="xs:string"/>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

Problem ist noch immer der Knoten Summary. Hier möchte ich, individuell ein Absatz geschrieben werden kann. Vielleicht folgt darauf ein oder mehrere Aufzählungen. evtl. auch eine Verschachtelte Aufzählung. Danach wieder ein Absatz oder auch mehre und dann vielleicht nochmal eine Aufzählung.

z.B.

Diest ist eine Dokumentation eines SQL - Prozedur die auf folgende Tabellen Zugreift
  • tabelle_1
  • tabelle_2
Diese Tabellen müssen vor dem Kompilieren der Prozedur vorhanden sein.
  • eintrag 1
  • eintrag 2
und noch Text.


Und zum Schluss meine html-Seite

HTML:
head>
  <html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
</head>
<body>
    <br>
    <br>
    <center>
        <h1>
            Test-Projekt fuer Dokumentation</h1>
    </center>
    <center>
        <h2>
            1.0</h2>
    </center>
    <br>
    <center>
        <h3>
            August 2008</h3>
    </center>
    <br>
    <hr>
    <h2>
        pa_test_docu</h2>
    <p>
        Das Package dient zum Testen der Dokumentation mit folgenden Schwerpunkten</p>
    <p>
        und hier folgen noch Informationen</p>
    <ul>
        <li>Übersetzung in HTML</li><li>Fehleranfälligkeit</li></ul>
    <br>
    <h2>
        <span>Autoren</span></h2>
    <ul>
        <li>Johannes</li><li>Max</li></ul>
    <h2>
        <span>Versionen</span></h2>
    <ul>
        <li>0.1 - Struktur angelegt</li><li>0.2 - Implementierung</li></ul>
    <h2>
        <span>Aufgaben</span></h2>
    <ul>
        <li>Testen</li><li>Dokumentieren</li></ul>
</body>
</html>


und die Ausgabe



Vielen Dank für deine Hilfe, dass ist wirklich nicht Selbstverständlich.
 

Anhänge

  • ausgabe.jpg
    ausgabe.jpg
    27,3 KB · Aufrufe: 14
  • xml_doc.zip
    1 KB · Aufrufe: 13
Zuletzt bearbeitet:
Hi,

okay, das hat jetzt etwas länger gedauert. Leider hast Du keinen Soll-Zustand gepostet, aber ich denke mal, dass folgendes das Gewünschte liefert:

XML:
<xsl:template match="/">
   <br />
   <br />
   <xsl:apply-templates select="/project/projectTitle" />
   <br />
   <hr />
   <h2>
      <xsl:apply-templates select="/project/docu/package/info/name" />
   </h2>
   <xsl:apply-templates select="/project/docu/package/info/summary" />
   <h2>
      <span>
         <xsl:text>Autoren</xsl:text>
      </span>
   </h2>
   <xsl:apply-templates select="/project/docu/package/info/authors" />                            
   <h2>
      <span>
         <xsl:text>Versionen</xsl:text>
      </span>
   </h2>
   <xsl:apply-templates select="/project/docu/package/info/versions" />                            
   <h2>
      <span>
         <xsl:text>Aufgaben</xsl:text>
      </span>
   </h2>
   <xsl:apply-templates select="/project/docu/package/info/todos" /> 
</xsl:template>
<xsl:template match="projectTitle">
   <xsl:apply-templates select="name"/>
   <xsl:apply-templates select="version"/>
   <xsl:apply-templates select="datum"/>
</xsl:template>  
<xsl:template match="name">
   <center>
      <h1>
         <xsl:apply-templates />
      </h1>
   </center>
</xsl:template>    
<xsl:template match="version">
   <center>
      <h2>
         <xsl:apply-templates /> 
      </h2>
   </center>
</xsl:template>    
<xsl:template match="datum">
   <center>
      <h3>
         <xsl:apply-templates /> 
      </h3>
   </center>
</xsl:template>  
<xsl:template match="summary">
   <xsl:apply-templates /> 
</xsl:template>  
<xsl:template match="p">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>
<xsl:template match="ul">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>
<xsl:template match="li">
   <xsl:copy>
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>
<xsl:template match="authors">
   <ul>
      <xsl:for-each select="author">
         <li>
            <xsl:apply-templates />
         </li>
      </xsl:for-each>
   </ul>
</xsl:template>
<xsl:template match="versions">
   <ul>
      <xsl:for-each select="version">
         <li>
            <xsl:apply-templates />
         </li>
      </xsl:for-each>
   </ul>
</xsl:template>
<xsl:template match="todos">
   <ul>
      <xsl:for-each select="todo">
         <li>
            <xsl:apply-templates />
         </li>
      </xsl:for-each>
   </ul>
</xsl:template>

Das muss jetzt nicht die schönste Lösung sein, ich zähle da selbst nicht zu den Gurus. Vielleicht fällt jemandem noch eine elegantere Variante ein.

LG
 
Zuletzt bearbeitet von einem Moderator:
danke :)

schreibst du das ganze aus dem Kopf oder hast du einen Designer? Ich verwende StyleVision 2008. Leider will der immer mittels for-each die Knoten durchlaufen. Ich finde keine Möglichkeit das zu Unterbinden :-( Deshalb sieht anscheind die Ausgabe im Moment folgendermaßen aus:

HTML:
    <p>
        Das Package dient zum Testen der Dokumentation mit folgenden Schwerpunkten</p>
    <p>
        und hier folgen noch Informationen</p>
    <ul>
        <li>Übersetzung in HTML</li><li>Fehleranfälligkeit</li>
    </ul>


und nicht so:


HTML:
    <p>
        Das Package dient zum Testen der Dokumentation mit folgenden Schwerpunkten</p>

    <ul>
        <li>Übersetzung in HTML</li><li>Fehleranfälligkeit</li>
    </ul>

    <p>
        und hier folgen noch Informationen</p>

Code:
 <xsl:for-each select="summary">
                                        <xsl:for-each select="p">
                                            <p>
                                                <xsl:apply-templates />
                                            </p>
                                        </xsl:for-each>
                                        <xsl:for-each select="ul">
                                            <ul>
                                                <xsl:for-each select="li">
                                                    <li>
                                                        <xsl:apply-templates />
                                                    </li>
                                                </xsl:for-each>
                                            </ul>
                                        </xsl:for-each>

Ich hoffe das wird meine letzte Frage. Habe die gesamte nacht dran gesessen und bin bis auf die Summary Ausgabe fertig. Leider kann ich in StyleVison das ganze nicht Ändern, da darf man nur im Designer hantieren und nicht in der XSLT.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück