php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2011, 11:59  
Benutzer
 
Registriert seit: 25.03.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
shimu befindet sich auf einem aufstrebenden Ast
Standard XSL/XSLT und PHP 5

Hallo Leute!

Ich hab mom ein recht großes Problem mit dem xsl(t).
Ich hol mir mit einer SQL abfrage Daten aus meiner Datenbank und lese sie in eine XSL Datei ein. Anschließend möchte ich mit XSLT das ganze so formatieren dass ich es am Bildschirm lesbar ausgeben kann. Leider funktioniert bei dem 2ten Teil etwas nicht richtig. Ich habe kontrolliert, ich bekomme eine gültige XSL Datei, aber anstatt dass ich am Bildschirm alles schön formatiert bekomme, wird nix angezeigt.
Ich hab mir gedacht, dass das evtl an nicht geladenen Extensions liegt, und in der php.ini bzw auch mit hilfe von phpinfo nachgeschaut. Die xsl extension ist geladen. xslt nicht. Nur bin ich mir recht sicher dass ich das mit php 5 nicht mehr laden muss.
Weiß da jemand genaueres woran es scheitert? Was braucht ihr dafür um mir helfen zu können?

lg
Shimu
shimu ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.04.2011, 12:04  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von shimu Beitrag anzeigen
Was braucht ihr dafür um mir helfen zu können?
  • Minimaler Beispielcode. Der Fehler liegt meistens in deinem Quelltext. Ohne den zu sehen ist es schwierig, Tipps abzugeben. Der Code sollte auf das notwendigste gekürzt sein, trotzdem aber in sich geschlossen sein. Das heißt zum Beispiel, wenn du weißt das der Fehler nicht an der Datenbank liegt, dann sollte ich zum Testen deines Codes keine Datenbank einrichten müssen.
  • Fehlermeldungen, die du angezeigt bekommst. Falls du keine angezeigt bekommst, dann liegt das meistens daran, das display_errors ausgeschaltet ist oder error_reporting zu niedrig ist.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden
mimomamu ist offline   Mit Zitat antworten
Alt 12.04.2011, 12:11  
Benutzer
 
Benutzerbild von sharpx
 
Registriert seit: 12.04.2011
Beiträge: 50
PHP-Kenntnisse:
Fortgeschritten
sharpx befindet sich auf einem aufstrebenden Ast
Standard

Ohne dir jetzt etwas unterstellen zu wollen, denke ich, nachdem ich deinen Beitrag gelesen habe, dass du die Grundidee von XSLT nicht wirklich verstanden hast.

Grundidee ist es, die Inhalte einer XML-Datei mithilfe von Stylesheets (=> XSL) zu formatieren um Inhalte "benutzerfreundlich" auszugeben.

Genau wie mein Vorgänger würde auch ich dich um Quellcodeausschnitte sowie die Auflistung eventueller Fehlermeldungen bitten. Zusätzlich wäre es auch hilfreich, etwas mehr über den Zweck deines Skriptes zu erfahren, da wir dir so sicherlich bessere Hilfestellungen bieten können.
sharpx ist offline   Mit Zitat antworten
Alt 12.04.2011, 12:18  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 495
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von sharpx Beitrag anzeigen
Grundidee ist es, die Inhalte einer XML-Datei mithilfe von Stylesheets (=> XSL) zu formatieren um Inhalte "benutzerfreundlich" auszugeben.
XSLT transformiert XML-Daten eher. Das muss nicht unbedingt eine Transformation zu Präsentationszwecken sein.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden
mimomamu ist offline   Mit Zitat antworten
Alt 12.04.2011, 12:27  
Benutzer
 
Registriert seit: 25.03.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
shimu befindet sich auf einem aufstrebenden Ast
Standard

Danke für die schnellen Antworten.
Ja du hast recht, mit XML/XSL/... bin ich nicht fit. Hab jetzt nochmals nachgeschaut, und es wird eine XML Datei mit XSL benutzerfreundlich ausgegeben.

Das Skript soll einen Bericht erstellen, auf dem für ein bestimmtes Monat pro Kunde die Aufträge und die Summe ausgegeben werden.

Fehlermeldungen gibt es leider keine. Obwohl ich das error_reporting hoch angesetzt hab. (Ich bekomm alles ausgegeben, vom notice bis ...).

Da ich mit XML/XSL nicht wirklich fit bin weiß ich auch nicht so genau was ihr da genau für einen Code braucht. Den XSL Teil oder was von PHP?
Mein Problem ist, dass ich das ganze nicht selbst geschrieben habe. Und unter PHP 4 funktioniert das Skript auch, ich soll es jetzt aber nach PHP 5 portieren...
shimu ist offline   Mit Zitat antworten
Alt 12.04.2011, 12:31  
Benutzer
 
Benutzerbild von sharpx
 
Registriert seit: 12.04.2011
Beiträge: 50
PHP-Kenntnisse:
Fortgeschritten
sharpx befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mimomamu Beitrag anzeigen
XSLT transformiert XML-Daten eher. Das muss nicht unbedingt eine Transformation zu Präsentationszwecken sein.
Ich habe an dieser Stelle eine einfache Erklärung der fachlich korrekten vorgezogen, da ich bereits davon ausging, dass der Threadersteller in diesem Bereich noch nicht besonders fitt ist. Trotzdem danke für den Hinweis.

Am besten du lädst einfach mal alle relevanten Bestandteile hoch, d.h. PHP-Code, XSL-Datei und evtl. auch ein Beispiel für eine XML-Datei bzw. den Aufbau deiner Datenbank.
sharpx ist offline   Mit Zitat antworten
Alt 12.04.2011, 12:52  
Benutzer
 
Registriert seit: 25.03.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
shimu befindet sich auf einem aufstrebenden Ast
Standard

Ok, ich hoffe das ist alles:

PHP-Code:
// Daten aus XML lesen
$xml = new XMLFile();
$xml->read_xml_string$dataxml);

$root = &$xml->roottag;
$dataarray = array();

if( 
$root->name == "report")        # Root-element
{
  
$tag = &reset$root->tags);

  if( 
$tag && $tag->name == "year")
  {
    
$year $tag->attributes["name"];

    
$tag_month = &reset$tag->tags);
    while( 
$tag_month && $tag_month->name == "month")
    {
      
$month $tag_month->attributes["name"];    // zBsp. Jänner, Februar, ...
      
$summe "0,00";
      
$a_tag_sum $tag_month->find_subtags_by_name("sum");
      
$tag_sum $a_tag_sum[0];

      if( 
$tag_sum)
        
$summe $tag_sum->cdata;

        
$dataarray[$month] = $summe;

      
$tag_month = &next$tag->tags);
    }
  }

Das ist die Bearbeitung vom XML File mit php.

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\_WORK\kamis\_web\reports\_reports_def\rep_auftraege_nach_eingangsmonat.xsl"?>
<report>
	<group mode="year" name="2006" title="projects.annahme">
		<group mode="month" name="Jänner" title="projects.annahme">
			<dataset>
			<field name="contact.kundennr" title="contact.kundennr"><![CDATA[Kundennr]]></field>
				<field name="contact.kurzname" title="contact.kurzname"><![CDATA[Kunde]]></field>
				<field name="projects.auftragstitelkurz" title="projects.auftragstitelkurz"><![CDATA[Auto]]></field>
				<field name="projects.annahme" title="projects.annahme">01.01.2006</field>
				<field name="stundenbudget" title="stundenbudget">500</field>
				<field name="projects.sollfremdkosten" title="projects.sollfremdkosten">100</field>
				<field name="projects.auftragswert" title="projects.auftragswert">1000</field>
			</dataset>
			<sum field="projects.auftragswert">5000</sum>
		</group>
	</group>
	<sum field="projects.auftragswert">100</sum>
</report>
So in etwa (halt mit anderen Werten und länger = für jedes monat und jeden kunden ein dataset) sieht die xml datei aus.

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <xsl:decimal-format name="de" decimal-separator="," grouping-separator="."/>
  <xsl:template match="/">
  <html>
    <head>
      <title>Titel</title>
      <link rel="stylesheet" href="../css/style.css" type="text/css"/>
    </head>
    <body>
    <xsl:for-each select="report/year">
        <dt class="x">
          <span id="r">
            Jahr <xsl:value-of select="@name"/>
          </span>
        </dt>
        <dd>
          <table class="general" border="0" cellspacing="0" cellpadding="2" style="width:85%;">
          <xsl:for-each select="month">
            <tr>
              <td class="x">
                <b>
                  <xsl:value-of select="@name"/>
                </b>
              </td>
              <td class="x">
                <b>Kunde</b>
              </td>
              <td class="x">
                <b>Auftrag</b>
              </td>
              <td class="x">
                <b>Annahmedatum</b>
              </td>
              <td class="x" align="right">
                <b>Std-Budget</b>
              </td>              
              <td class="x" align="right">
                <b>FK-Budget</b>
              </td>              
              <td class="x" align="right">
                <b>Auftragswert</b>
              </td>
            </tr>
            <xsl:for-each select="dataset">
            <tr>
              <xsl:for-each select="field">
              <xsl:choose>
                  <xsl:when test="@name='projects.auftragswert'">
                    <td class="d" align="right">
                    <xsl:value-of select="."/>
                    </td>
                  </xsl:when>
                  <xsl:when test="@name='stundenbudget'">
                    <td class="d" align="right">
                    <xsl:value-of select="."/>
                    </td>
                  </xsl:when>
                  <xsl:when test="@name='projects.sollfremdkosten'">
                    <td class="d" align="right">
                    <xsl:value-of select="."/>
                    </td>
                  </xsl:when>
              <xsl:otherwise>
                <td class="d">
                  <xsl:choose>
                    <xsl:when test="@name='customer.id'">Kundnr.: </xsl:when>
                  </xsl:choose>
                  <xsl:choose>
                    <xsl:when test="@name='projects.auftragswert'">
                      <xsl:value-of select="."/>
                    </xsl:when>
                    <xsl:when test="@name='contact.kundennr'">
                      <!-- <a><xsl:attribute name="href"><![CDATA[../contact/contact.php?action=edit&id=]]><xsl:value-of select="../field[1]"/></xsl:attribute> -->
                      <!-- <xsl:value-of select="."/> -->
                      <!-- </a> -->
                    </xsl:when>
                    <xsl:when test="@name='customer.kurzzame'">
                      <a><xsl:attribute name="href"><![CDATA[../contact/contact.php?action=edit&id=]]><xsl:value-of select="../field[1]"/></xsl:attribute>
                      <xsl:value-of select="."/>
                      </a>
                    </xsl:when>
                    <xsl:when test="@name='projects.auftragstitelkurz'">
                      <!-- <a><xsl:attribute name="href"><![CDATA[auftrag.php?action=edit&auftrag_nr=]]><xsl:value-of select="../field[1]"/></xsl:attribute> -->
                      <xsl:value-of select="."/>
                      <!-- </a> -->
                    </xsl:when>                    
                    <xsl:otherwise>
                      <xsl:value-of select="."/>
                    </xsl:otherwise>
                  </xsl:choose>
                </td>
                </xsl:otherwise>
                </xsl:choose>
              </xsl:for-each>
            </tr>
            </xsl:for-each>
            <tr><td class="d"><b>Monatseingang</b></td>
              <td class="d" colspan="6" align="right">
                <b>
                  <xsl:value-of select="sum"/>
                </b>
              </td>
            </tr>
            <tr>
              <td colspan="5">
                <br/>
              </td>
            </tr>
            </xsl:for-each>
            <tr>
            <td class="d" colspan="6">
               <strong>Gesamteingang</strong>
            </td>
              <td class="d" align="right">
                <span id="repueb2">
                  <strong>
                    <xsl:value-of select="sum"/>
                  </strong>
                </span>
              </td>
            </tr>
          </table>
          <p><br/></p>
        </dd>
        </xsl:for-each>
        <img src ...>
.
.
.
Das war das xsl File. Hoffe ich habe alles wichtige erwischt.
shimu ist offline   Mit Zitat antworten
Alt 12.04.2011, 13:44  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Dein XSL-Foreach selected tag report / tag year, sollte aber tag report / tag group [@attribute year] selecten. Außerdem ist dein Stylesheet auch statisch in die XML geschrieben ( mit absoluter Angabe wo das Stylesheet liegt ), unflexibel.

Ich rate dir auch templates für Tags zu erzeugen und sie ins root-template zu inserten. ( Übersichtsgewinn hoch 20 )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 15.04.2011, 13:51  
Erfahrener Benutzer
 
Registriert seit: 17.08.2010
Beiträge: 216
PHP-Kenntnisse:
Fortgeschritten
Dormilich befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von shimu Beitrag anzeigen
Mein Problem ist, dass ich das ganze nicht selbst geschrieben habe. Und unter PHP 4 funktioniert das Skript auch, ich soll es jetzt aber nach PHP 5 portieren...
wie schon gesagt wurde, solltest du das stylesheet (XSL) nicht in die XML-Datei schreiben, die externe Verarbeitung ist da echt übersichtlicher (und du kannst ein XML beliebig oft mit XSLT bearbeiten). In dieser Hinsicht sind dann aber PHP 4 (nutzt expat) und PHP 5 (nutzt libxml) völlig unterschiedlich. eine Beschreibung der PHP 5 Syntax findest du im XSL-Abschnitt.
Dormilich ist offline   Mit Zitat antworten
Alt 18.04.2011, 10:46  
Benutzer
 
Registriert seit: 25.03.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
shimu befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Hilfe. Das Problem ist jetzt gelöst.
Das Problem war, das es im XML das Tag "year" nicht gibt. Ich hab dann "group" verwendet, und das funktioniert, sowohl mit PHP 4 als auch mit PHP 5.

Nochmals Danke für die Hilfe.
so long
Shimu
shimu ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php xslt, php xsl lesen, xsl with php 5, php 5 xml xsl, xslt value-of field separator, xsl fortgeschritten, php mit xslt ausgeben, in xsl datei php nutzen, php xslt -xsltprocessor, xslt beispiele in php 5, stylesheet im xml angeben, php xsl if bedingungen, php xml datei ausgeben xsl css, php 5 xsl, php xslt datei auslesen, php xsl nicht zu finden in php ini, php 5 with xsl, php xml xsl formatieren, php xslt beispiel, <heading><![cdata[contact form]]

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum