Variable in XML hochzählen

  • PHP

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Goldwing Studios.

    Variable in XML hochzählen

    Hi,


    ich habe folgendes Problemchen, ich lese eine Variable

    Quellcode

    1. "number_of_logs"
    aus einer xml-datei welche den wert 0 hat.

    Nun benutze ich diese und lass sie in meinem PHP-Script hochzählen

    Quellcode

    1. $number++;
    und möchte den neuen Wert in diese xml speichern und zwar so

    Quellcode

    1. $xml->number_of_logs = $number;



    Hier fängt mein Problem an, ich weiß nicht ob die Variable wirklich gesetzt wird und mit

    Quellcode

    1. $xml_logs->asXML();
    ändert sich nichts an der Datei nach der zuweisung.



    Hat da jemand ne Idee was falsch sein könnte? ?(
    Dieses Beispiel funktioniert:

    PHP-Quellcode

    1. <?php
    2. $xmlString = <<<XML
    3. <?xml version="1.0" encoding="UTF-8"?>
    4. <root>
    5. <number_of_logs>0</number_of_logs>
    6. </root>
    7. XML;
    8. $xml = new SimpleXMLElement($xmlString);
    9. var_dump($xml->number_of_logs); //string(1) "0"
    10. $number = intval($xml->number_of_logs);
    11. $number++;
    12. $xml->number_of_logs = $number;
    13. var_dump($xml->asXML());

    Die Ursache dürfte darin gelegen haben, dass SimpleXML alles als String interpretiert, und einen solchen kannst du nicht hochzählen. Daher caste ich den Inhalt des Elements zu einem Integer (Zeile 12).
    ->[PHP] Variable in XML hochzählen
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Lukas“ ()

    na ich hab desshalb gefragt weil, wenn er

    PHP-Quellcode

    1. $xml_logs->asXML();
    das wirklich so benutzt ändert sich an der datei auch nix. denn "asXML()" hat nen optionalen parameter "$filename". ist der nicht angegeben, gibt er den ganzen xml-code zurück. erst wenn "$filename" gegeben ist, schreibt die func es auch in die datei
    @Agita: Daran habe ich gar nicht gedacht, ich hatte von Anfang eine Casting-Geschichte im Hinterkopf. Die scheint (auch) zuzutreffen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    php sieht das mit den var typen nich so eng. um genau zu sein is es da sogar recht schlampig...
    in-fact kannst du auch folgendes machen

    PHP-Quellcode

    1. $lol = "123"; // = 123
    2. $lol++; // +1 = 124
    3. $lol -= "123"; // -123 = 1
    4. $lol = $lol.$lol; // = 11
    5. $lol /= 10; // = 1.1
    6. echo $lol;
    Also das man die Inkrementoperatoren mit Erfolg auf Strings anwenden kann ist mir neu. In der Wunderwelt der PHP-Castings lernt man immer wieder was :D

    @TE: Ich würde dennoch per intval drübergehen, da kommen sonst die seltsamsten Ergebnisse bei rum, sollten da mal Buchstaben drin sein.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lukas“ ()

    ^^ php versucht immer von alleine zu casten. von daher ist es sogar manchmal vom vorteil nicht via "$var = (int)$var;" selbst zu casten, da das ja wie gesagt scho von alleine geschieht ;D zumal es ga nich so unüblich ist, int's in strings zu speichern. google mal nach bcmath. das benutzt auch strings, wodurch es mit endlos großen zahlen arbeiten kann.
    Bei Präzisionsrechnung kann man das mit Strings sicher auch irgendwo verstehen, aber hier sollte das wohl eher nicht zutreffen. Ich bin gute Typisierung von .NET her gewohnt, und versuche auch, dass durch alle meine Skripte durchzuziehen. Es fühlt sich einfach besser an, wenn eine Zahl als Integer vorliegt :D
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    in sprachen wie .net muss jede var ja auch einen typ haben. das is in sprachen wie php oder js anders. daher kann man das nich wirklich vergleichen ^^
    aber genau das gibt auch wiederum neue möglichkeiten, wie in meinem beispiel eine string-zahl als int und gleichzeitig als string benutzen zu können. ohne gecaste is folgendes in .net unmöglich:

    $val = "12";
    $val = "$val$val" * $val[strlen($val)-1];
    echo $val;

    is halt ansichtssache von welcher seite man es betrachtet :) ick finde solange man 100%ig sicher is, dass man die kontrolle hat, is alles ok.