xml elemente verschieben
Hallo Community,
ich beschäftige mich derzeit mit php5 und xml, genauer gesagt simplexml. Soweit habe ich die Sache auch am Start und scheine jetzt an die Grenzen von simplexml zu kommen deshalb hier meine Frage. Folgendes xml Beispiel will ich bearbeiten: Code:
<channel> "a3" soll verschoben werden vor "a1", es sollte aber so sein das wenn Kinder in "a3" vorhanden sind diese auch mit übernommen werden. Die Attribute sollten ebenfalls erhalten bleiben. Lässt sich das ganze irgendwie mit simplexml erschlagen oder muss ich mich doch wirklich mit DOM beschäftigen? Leider ist DOM für mein Gehirn nicht wirklich geeignet, wäre gut wenn man das auch anders, leichter erschlagen könnte. Danke für Eure Hilfe. |
AW: xml elemente verschieben
Wenn du hier keine umgekehrte Sortierung haben willst macht es eigentlich keinen Sinn oder besser sehe ich keinen Sinn den Knoten an eine andere Stelle zu setzen.
Oder möchtest/musst du die Ausgabe der Daten per Styles erledigen? Lt. deinem Beispiel ist innerhalb von "a" nur "a1" "a2" und "a3" als Knoten bzw. Element erlaubt. Da sie direkt angesprochen werden können ist ihre Position eigentlich vollkommen irrelevant sofern man die Ausgabe nicht über Styles machen möchte/muss. Dein Vorhaben ist mit Funktionen von simpleXML und, wenn ich nichts übersehen habe, auch mit DOM so nicht machbar. Eine Möglichkeit wäre die Knoten deiner XML Datei in eine neue tempoäre XML Datei oder neu in die vorhandene Datei so zu schreiben, wie du sie gern haben möchtest. |
AW: xml elemente verschieben
Es kann natürlich gut sein das ich zu kompliziert denke bzw. xml für mein Vorhaben nicht wirklich geeignet ist. Ich will versuchen das kurz darzulegen:
Ich arbeite meine Webseite um will keine Datenbank im herkommlichen Sinne benutzen, warum das lassen wir mal aussen vor. Deswegen kam mir der Gedanke nimm doch einfach xml, für sowas ist es doch geschaffen worden, oder? Soweit so gut, das bedeutet das die Navigation + Inhalte allein aus dieser xml stammen. In unserem Beispiel wäre "a" die Überschift bzw. Kategorie und "a1, a2..." der Content. Jetzt will man natürlich die Links bzw. Kategorien speziell wenn was neues hinzukommt nicht am Ende haben sondern das ganze sortieren, genau dafür müsste auch die xml Datei umsortiert werden. Mein Gedanke war jetzt eventuell den Knoten zu lösen und per "DOMDomument::importNode" an die gewünschte Stelle zu importieren, aber im Moment scheitere ich daran. |
AW: xml elemente verschieben
Vorab erst einmal: XML dient für den Datentransport zwischen Anwendungen. Sicherlich kann man es auch als DB Erstaz nutzen.
Da ich nun weiß wo das Problem liegt kannst du sowas per DOM umsetzen. Zum Einfügen würde sich da DOMNode::insertBefore anbieten. Zuvor müsstest du natürlich die Stelle ermitteln an der der neue Knoten erstellt werden muß. Ich bin mir allerdings nicht sicher ob deine XML Struktur hier richtig gewählt ist, wenn du damit ganze Wegseiten erstellen willst. Insbesondere der Einsatz von Attributen scheint mir nicht klar und sinnvoll zu erscheinen. Kann aber auch sein, daß es nur an dem vereinfachten Beispiel liegt. Neuer Content könnte ruhig am Ende stehen. Hier könnte man die Knoten in umgekehrter Reihenfolge ausgeben lassen. Bei einem neuen Menüeintrag sollte diese schon an der korrekten Stelle stehen, wenn das Menü nicht sinnvoll sortiert werden kann. Nach dem Alphabet sortieren z. B. Zitat:
|
AW: xml elemente verschieben
Also was die Attribute betrifft so muss ich Dir sagen das sich das für mich als notwendig erachte und die bereits auch nutze wie z.B.
Code:
<Impressum name="Impressum" link="/Infos/Impressum" status="content" visible="yes">...</Impressum> Ich werte die Attribute bereits aus und das funktioniert einwandfrei. Was nun meinen Versuch betrifft so sei nachsichtig mit mir, ich fang eben erst an mit DOM: xm (test.xml): Code:
<?xml version="1.0" encoding="utf-8"?> Code:
$newdoc = new DOMDocument; Fatal error: Call to undefined method DOMElement::importNode() was ich bis jetzt leider noch nicht begriffen hab. Eventuell kannst Dur mir da einen Tip geben, wäre nett. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:42:07 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.