2017-08-30 6 views
0

je besoin d'un tel XML:Ajouter des attributs similaires à Childs similaires SimpleXML

<event id="8055107" tournament="40623"> 
    <fct id="1816" v="1.57" p="3" /> 
    <fct id="1696" v="1.2" p="3.5" /> 
    <fct id="703" v="9" /> 
    <fct id="1886" v="4.8" p="4.5"/> 
    <fct id="1739" v="4.4" p="7.5"/> 
</event> 

J'essaie cela, mais obtenir l'erreur:

$this->parser = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><line></line>'); 
$this->parser->addChild('event'); 
$fcts = [[921, '1.5'], [922, '1.6'], [923, '1.7']]; 
foreach ($fcts as $fct) { 
    $this->parser->event->addChild('fct')->addAttribute('id', $fct[0]); 
    $this->parser->event->fct->addAttribute('v', $fct[1]); 
} 

L'erreur est SimpleXMLElement :: addAttribute(): L'attribut existe déjà. Aidez-moi, s'il vous plaît.

Répondre

1

$this->parser->event->fct est une référence. Vous essayez de définir l'attribut sur le même élément fct.

Le droit chemin:

... 
foreach ($fcts as $fct) { 
    $fct_node = $this->parser->event->addChild('fct'); 
    $fct_node->addAttribute('id', $fct[0]); 
    $fct_node->addAttribute('v', $fct[1]); 
} 

http://php.net/manual/en/simplexmlelement.addchild.php

+0

Merci il a bien fonctionné pour moi! – santaatnas

1

La ligne

$this->parser->event->fct->addAttribute('v', $fct[1]); 

toujours ajouter l'attribut v au premier élément <fct> dans le document.

Vous devez attribuer le nouvel élément enfant à une variable d'abord, puis ajouter les attributs que directement:

foreach ($fcts as $fct) { 
    $child = $parser->event->addChild('fct'); 
    $child->addAttribute('id', $fct[0]); 
    $child->addAttribute('v', $fct[1]); 
} 
+0

Merci ça a bien fonctionné pour moi! – santaatnas

+0

Si cela aide quelqu'un à suivre, '$ this-> parser-> event-> fct' est un raccourci pour l'événement' $ this-> parser-> [0] -> fct [0] ' – IMSoP