XML mit PHP bearbeiten
klaus11111
- xml
Hallo,
ich habe ein XML
<artikel>
<beschreibung type="short">
text1
</beschreibung>
<beschreibung type="long">
text2
</beschreibung>
</artikel>
in ein Array $xml eingelesen.
Ich möchte jetzt text1 und text2 ändern:
$xml->artikel->beschreibung->short = "neuer Text1";
$xml->artikel->beschreibung->long = "neuer Text2";
fuktioniert nicht.
was ist der richtige Syntax?
Gruß
klaus
Hi,
<beschreibung type="short">
text1
</beschreibung>
$xml->artikel->beschreibung->short = "neuer Text1";
nun stell Dir vor, in Deinem Element <beschreibung> befände sich ein Element <short>. Was sollte nun von Deinem Code gefunden werden?
Dein Versuch ist abhängig von einem nicht deterministischen Algorithmus[1]. SimpleXML ist zudem kein vereinfachter XPATH-Ausdruck, deswegen kann das gleich zweimal nicht funktionieren. SimpleXML *kennt* jedoch XPATH-Ausdrücke. Nutze diese Fähigkeit.
Cheatah
[1] Da Algorithmen per definitionem deterministisch sind, also von _keinem_ Algorithmus, sondern von purem Zufall.
Hallo,
ich habe mir kurz XPATH angesehen, das Auslesen eines XML ist möglich, aber auch das Ersetzen bestehender Ausdrücke?
GRuß
klaus
Hi,
ich habe mir kurz XPATH angesehen, das Auslesen eines XML ist möglich, aber auch das Ersetzen bestehender Ausdrücke?
das kann SimpleXML ebenfalls. Ich nehme an, deswegen benutzt Du es, oder?
Cheatah
Hallo,
ja, ich benutze Simplyxml.
Dann muss ich mich in Xpath einlesen.
DAnke
Gruß
klaus
Hellihello
Hallo,
ich habe mir kurz XPATH angesehen, das Auslesen eines XML ist möglich, aber auch das Ersetzen bestehender Ausdrücke?
genau das geht glaub ich nicht.
$xml_string = '<?xml version="1.0"?>
<artikel>
<beschreibung type="short">
text1
</beschreibung>
<beschreibung type="long">
text2
</beschreibung>
</artikel>';
$sx = simplexml_load_string($xml_string);
var_dump($sx);
$sx->beschreibung[0]="neuerText1(short)";
var_dump($sx);
funktioniert erstmal. Musste aber wissen, an welcher Stelle das ist.
foreach ($sx->beschreibung as $key => $beschreibung) {
$beschreibung) {
if ($beschreibung["type"]=="long") {
var_dump($key); // bringt komischerweise "beschreibung"
// somit geht dann $sx->beschreibung[$key] nicht zu setzen.
}
}
var_dump($sx);
bringt nischt.
$neu = $sx->xpath("/artikel/beschreibung[@type='long']");
var_dump($neu);
bringt ein Array von Objekten, das sind aber keine Referenzen auf die Objektknoten im simpleXmlObjekt, können also so nicht verändert werden.
An der Stelle würd ich mal immer überlegen, warum du das denn genau so änderen wollen würdest. U.u. musst du dann vielleicht die DomDocument-Funktionen bemühen.
Dank und Gruß,
Hellihello
Hallo,
ich habe ein XML
<artikel>
<beschreibung type="short">
text1
</beschreibung>
<beschreibung type="long">
text2
</beschreibung>
</artikel>in ein Array $xml eingelesen.
mit simplexml?
was ist die DokumentRoot?
vielleicht so?
$xml->beschreibung->short = "neuer Text1";
ah, ich sehe, du willst dort, wo das attribut short ist ändern. Das wird schwieriger, du musst das Element mit xpath finden. Oder du durchläufst die $xml->beschreibung mit foreach und testest, ob $xml->berschreibung["type"]=="short" oder evtl. sogar (string)$xml->berschreibung["type"]=="short", da der Inhalt vielleicht erstmal kein string ist (Elementknoten sind Objekte, Attributwerte weißichnicht).
Dank und Gruß,