tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Charriu Charriu ist offline Mitglied Bronze
    Registriert seit
    Sep 2007
    Beiträge
    33
    Hallo,
    Ich stehe leider mal wieder voll auf dem Schlauch und alles Googeln hat nichts geholfen. Also ich habe eine XML-Datei, sie sieht so aus (stark vereinfacht):

    Code :
    1
    2
    3
    4
    5
    6
    
    <datenbank Id="1">
      <fragebogen Id="fb1" Name="blabla" Text="blabla">
        <topic Id="to1" Name="blablubb"></topic>
        <topic Id="to2"Name="blablubb"></topic>
      </fragebogen>
    </dtaenbank>

    Und jetzt möchte ich das Element raussuchen, dass die Id=fb1 hat und in diesem Element möchte ich danach zum Beispiel das Attribute Name ändern. Aber irgendwie komme ich da nicht hin wo ich hin will.

    Die Beispiele im Internet zu SimpleXML versteh ich irgendwie nicht, zumal sie nie das Problem in Kombination zeigen. Entweder sie zeigen Attribute an, oder sie ändernd en Inhalt zwischen den Tags, aber keine Attribute.
    Wäre natürlich auch schön, wenn ich dann überall mit der Id etwas suchen und ändern könnte. Dann bräuchte es nur ein Skript für Fragebögen und Topics.

    Vielen Dank,
    Felix
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,
    hier mal ein funktionierendes Beispiel dafür mit beiden Dingen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    <pre><?php
    $string = <<<XML
    <datenbank Id="x1">
      <fragebogen Id="fb1" Name="blabla" Text="blabla">
        <topic Id="to1" Name="blablubb"></topic>
        <topic Id="to2" Name="blablubb"></topic>
      </fragebogen>
    </datenbank>
    XML;
     
    $xml = new SimpleXMLElement($string);
     
    //Fragebogen anhand Id suchen
    $result = $xml->xpath("fragebogen[@Id='fb1']");
     
    while(list( , $node) = each($result)) {
        //Name-Attribut ändern
        $node['Name']='Blubbbla';
    }
     
    //Test obs geändert wurde
    echo htmlentities($xml->asXML());
    ?>
    • per xpath() kannst du das/die Element(e) anhand eines XPath-Pfades selektieren
    • mit
      Code :
      1
      
      $Knoten['Attribut']="Wert";
      ein Attribut ändern
     

  3. #3
    Charriu Charriu ist offline Mitglied Bronze
    Registriert seit
    Sep 2007
    Beiträge
    33
    Hallo Sven,
    Schon einmal vielen Dank für deine Antwort. Hier mal meine Datei "save.php":

    PHP-Code:
    <?php 
    // Collect POST data
    $parentId $_POST['parentID'];
    $attr $_POST['attr'];
    $value $_POST['value'];

    // Search tags for the given id
    $frageboegen = new DOMDocument();
    $frageboegen->load("../siob2010.xml");
    $xpath = new DOMXPath($frageboegen);
    $elem $xpath->query('//*[@Id="'.$parentId.'"]');

    // Change the value of the node
    $attrNode $elem->item(0);
    $attrNode[$attr]=$value;

    // Save the XML
    echo $frageboegen->save("../siob2010.xml");
    ?>
    Die POST-Variablen kommen alle korrekt an. Nun möchte ich also in parentId=fb1 das Attribute "Beschreibung" ändern (attr=Beschreibung) und zwar in value=bla. Das Skript läuft auch durch, allerdings hat er nichts geändert, die XML-Datei sieht aus wie vorher. Ich muss das leider so dynamisch machen, weil es gibt frageboegen, fragebogen, topics, fragen, antwortoptionen und jedes davon mit einem unterschiedlich großen Satz von Attributen. Daher dachte ich mir, wenn ich die Id des Elementes habe und das Attribute welches ich ändern will, dann sollte das nicht so schwierig sein.

    Hab deinen Code probiert, aber da gibt es beim erzeugen des SimpleXMLDocuments einen Fehler. Irgendetwas mit den Klammern erwartet er anders, leider ist die XML vom Dozenten und ich darf da nichts rumbasteln.

    Danke,
    Felix
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Da gehts jetzt ein bissl durcheinander, weil du jetzt DOMDocument verwendest.

    Ändere das Setzen des Attributes,
    alt:
    Code :
    1
    2
    
    $attrNode = $elem->item(0);
    $attrNode[$attr]=$value;

    neu:
    Code :
    1
    2
    
    // Change the value of the node
    $elem->item(0)->setAttribute($attr,$value);

    ...aktiviere mal während der Entwicklung das error_reporting, das hätte dir eine betreffende Fehlermeldung ausgegeben
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.07.09, 22:47
  2. Attribute in Objektliste nach gecheckten Checkboxen setzen
    Von schlumsch im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 27.10.08, 19:35
  3. Objekte nach einem ihrer Attribute sortieren
    Von geisendorf im Forum Java
    Antworten: 3
    Letzter Beitrag: 23.01.08, 09:12
  4. simpleXML: Attribute mit Doppelpunkt
    Von dsturm im Forum PHP
    Antworten: 2
    Letzter Beitrag: 17.09.07, 12:43
  5. Attribute bei css
    Von alphadesigns im Forum CSS
    Antworten: 3
    Letzter Beitrag: 07.09.05, 16:57