Hallo,
Eclipse für XML/XSLT zu verwenden ist, wie sich freiwillig in Brennnessel zu wälzen: am Anfang (vielleicht) der Kick, nachher langes Leiden.
(OK, in MyEclipse sind dafür schon bessere Plugins vorhanden)
Nimm einen vernünftigen Editor für XML/XSLT.
was meinstdu denn damit genau? warum der Kick und dann das Leiden?
Der mächtigste Teil von XSLT sind die XPath-Ausrücke. Ein guter XSLT-Editor hat auch einen XPath-Parser. Das erleichter die Arbeit ungemein und hilft sehr viele Fehler von vornherein zu vermeiden.
Bei einem Ausdruck wie z.B.
match="subpage[not(@cmsused = 'no') and (publish = 'yes') and (number(concat(substring(/data/dateandtime/date,1,4),substring(/data/dateandtime/date,6,2),substring(/data/dateandtime/date,9,2))) >= number(concat(substring(startdate,1,4),substring(startdate,6,2),substring(startdate,9,2))))]"
oder
href="Walker?source={sdml:getPathFromIndex($pagenode/id(@idref)/preceding-sibling::document[last()], $pagenode/id(@idref)/preceding-sibling::document[last()], '')}&style={sdml:getXSLPage($pagenode/id(@idref)/preceding-sibling::document[last()]/@id)}"
kann man schnell einen Fehler machen, nicht nur wenn man sich vertippt, sondern auch was den korrekten Inhaltstyp des Ausdrucks angeht.
Hier hilft Eclipse gar nicht. Macht man einen Fehler wird das erst sichbar wenn man dein XML dann transformiert (und dann darf man in den serverlogs nachsehen, ob da eine gute Fehlermeldung steht)
Ein Editor mit einem XPath-Parser zeigt aber schon hier Tippfehler und mögliche Typ-Unverträglichkeiten an.
Und welchen Editor würdest du mir empfehlen?
Es gibt viele, auch als freeware (aber wie genau das Feld jetzt dabei aussieht kann ich dir nicht sagen). Wenn du nur für dich ein wenig experimentierst, ist es vielleicht nicht wirklich nötig, dass du einen professionellen Editor kaufst. Aber wenn du das möchtest, kann ich dir Oxygen empfehlen. XMLSpy bot auch mal eine freie Version seines Editors an (und es gibt auch ein Plugin für die Intergration in Eclipse), allerdings bieten sie das nicht mehr an. Ev. ist das noch auf irgendeine PC-Zeitschift-CD zu finden.
ich habe auch vor, XML und XSLT Daten mit PHP zusammen zufügen .
Nö ;-) Du hast vor mit PHP XML/XSL-Transformation auszuführen ;-)
Gibts da irgendwie gute tips die Sache möglichst übersichtlich behandeln zu können. Habe letztens was im php_manual gesehen - finde nur leider die Stelle nicht mehr -...ein Knoten wurde mit folgenden Zeichen eingetragen
<<< node-code
Als Ausgangspunkt empfehle ich dir: http://www.php.net/manual/en/ref.xsl.php und http://www.php.net/manual/en/ref.domxml.php
Dann die Seiten der einzelnen Funktionen durchlesen und dabei vor allem die geposteten Beispiele. Da kannst du auch sehen wir XML- und auch XSL-Dateien erst als DOM (tree) geladen werden und dann erst die Transformation ausgeführt wird. (das nur wegen deiner Befürchtung von String)
....wäre super, wenn ich zum Thema XML Aufbereitung mit php irgendetwas finden könnte , was mir eine Richtung gibt.
Nächste große Buchhandlung mit EDV-Abteilung aufsuchen und dort paar PHP-Bücher (oder XSL-Bücher) unter die Lupe nehmen? ;-)
Was katuelles kann ich dir leider nicht empfehlen, da "meine" Bücher zum Thema sind noch auf PHP4 ausgerichtet.
Nein, so eine DTD kann es auch nich geben, denn was ist "alles"? Man kann mit XSLT nicht nur HTML sondern zig andere (XML) Formate erzeugen. Es ist nicht möglich für alle mögliche Ausgabeformate die DTDs einzubinden.
die eine DTD aus dem Link ist ja schon einmal gut für xsl und die ganzen elemente beziehen sich ja auf nodes aus dem namespace xsl
man müßte die DTD nur noch so verändern, dass auch beliebige nodes zulässig sind. Dies geht ja anscheinend mit ANY aber irgendwie scheint ANY nur alleine_stehend zu funktionieren.??
Ja, ANY kann nur alleine als Inhaltsmodell verwendet werden.
Da ANY ja "irgendein XML-Element" bedeutet, kann der Parser ja nicht wissen, was darin erlaubt ist, oder nicht und deshalb kann es nicht so etwaswie (ANY, myElem, etc.) geben.
Du kannst ja in die XSLT-DTD die HTML-DTD integrieren:
<!ENTITY % html.dtd SYSTEM "html.dtd">
%html.dtd;
und dann die in der XSL-DTD bereist definierte Entities verwenden:
<!ENTITY % result-elements "html">
<!ENTITY % non-xsl-instructions "html">
Aber wenn du dann z.B. nicht HTML sondern (XSL-)FO als ausgabe haben willst, muss du das austauschen. Und wenn du auch SVG erzeugen willst, auch. Und wenn du [setze was ein] erzeugen willst, auch.
Oder es so machen:
<!ENTITY % result-elements "(html | svg:svg | xsl:fo)*"> und so weiter.
Und dann würdest du DTDs für SVG, XSL-FO etc. brauchen.
Was meinst du mit "so einer xml datei"? Aus einer wo XML und XSLT in wildem Miteinander mit HTML föhlich eine Regen des Willkürs und der Unübersichtlichkeit tanzen?
man würde halt nach jedem einleitenden Tag für ein element auch noch das xsl stylesheet mitgeben
so vielleicht ;-)Daten:basis
<xsl:template match="?">
</xsl:template>Daten:node
<xsl:templa...
</ xsl:templ...</ inhalt:basis>
Wäähhh! Iggit! ;-)
allerdings wenn man in php die xml-dateien zusammensetzten würde, müßt eman natürlich auch auf einen editor verzichten. Vielleicht gibt es da ja bewährte Techniken.
DOM z.B. Du kannst ja mit DOM Objekte erzeugen und diese dann manipulieren etc. und auch letzten als XML serialisieren (sprich als echtes XML ausliefern)
Allgemein könnte ich mir z.B. auch gut ein PHP - object vorstellen, das so eine xml_datei wieder in 2 getrennte schreiben könnte und diese dann als xhtml ausgibt.
Ich denke hier liegt noch immer ein Missverständnis deinersets vor. Verabschiede dich erstmal von dem Gedanken, dass XML ein "Object" sei.
Nimm XML zunächst als das was es meistens ist: eine Datei.
Wenn du aus dieser Datei erst ein DOM-Objekt erstellt hast, kann man von Objekt sprechen.
<?php
$domxml = domxml_open_file('test.xml',DOMXML_LOAD_VALIDATING,$error);
?>
Oder domxml_open_mem() — erstellt ein DOM-Objekt eines XML-Dokuments.
Dann kannst du mit diesen/m DOM-Objekt(en) arbeiten, ob du jetzt Knoten hinzufügst, sie entfernst oder anderwertig manipulierst.
Natürlich kannst du dann in PHP Funktionen schreiben, die dir aus dem einen DOM-Objekt zwei erstellt und dann jeden für sich mit XSLT zu jeweils andere XHTML-Datei transformiert. Aber da muss du dir auch überlegen, dass z.B. an den Browser immer nur eine Datei zur selben Zeit gesendet werden kann, also wirs du die Ergebnisse der Transformationen auf die Platte schreiben müssen. etc. Oder eben umgekehrt, aus zwei DOM-Objekten eines erstellt und nur dieses transformiert.
Da ist halt immer die Frage was und wozu du es brauchst.
Grüße
Thomas