0

I've been researching this problem, but I can't find what I need. It shouldn't be difficult, probably it's a matter of syntax =)

I create a string representing an XML inside the function like this:

$sxe = simplexml_load_string('
<xmlFile>
 <item param="'.$variable.'">
  <subitem>'.$var2s.'</subitem>
 </item>
</xmlFile>
');

The contents of the variables are plain strings like this abc,def,ghi in both variables which I obtain from a hash this way:

isset($variable);
$variable="";
isset($vars2);
$vars2="";

foreach ($hashArray as $stringKey => $stringValue) {
 // I separate each result with a comma
 $variable .= $stringKey.",";
 $vars2 .= $stringValue.",";
}
// Then remove the last comma
$variable = substr($variable, 0, -1);
$vars2 = substr($vars2, 0, -1);

When I save my XML with $sxe->asXml('xml/myGreatFile.xml'); I got something similar to:

<xmlFile>
 <item param="abc,def,ghi">
  <subitem>JKL,MNO,PQR</subitem>
 </item>
</xmlFile>

That was fine but now for my new requirement I need a result similar to this:

<xmlFile>
 <item param="abc">
  <subitem>JKL</subitem>
 </item>
 <item param="def">
  <subitem>MNO</subitem>
 </item>
 <item param="ghi">
  <subitem>PQR</subitem>
 </item>
</xmlFile>

How can I create this repetitive node? I tried to concatenate PHP functions inside the simplexml_load_string string as I did with the variables but seems to be it's not possible:

$sxe = simplexml_load_string('
<xmlFile>'.
 // Syntax Error u_u
 foreach ($hashArray as $stringKey => $stringValue) {
  $variable .= $stringKey.",";
  $vars2 .= $stringValue.",";.
 
 '<item param="'.$variable.'">
  <subitem>'.$var2s.'</subitem>
 </item>'.
 }
.'</xmlFile>
');

Of course my syntax it's wrong, but I want to create this repetitive node somehow, maybe with a cycle and maybe using my hash array directly instead of passing it to string.

halfer
  • 19,824
  • 17
  • 99
  • 186
Metafaniel
  • 29,318
  • 8
  • 40
  • 67

1 Answers1

1

The answer is pretty simple: build your string variable outside of the simplexml function and then use it in the function.

  $mystring = "<xmlFile>";
  foreach($array as $key => $value)
  {
      $mystring .= "<item param='$key'><subitem>$value</subitem></item>";
  }
  $mystring .= "</xmlFile>";

  $sxe = simplexml_load_string($mystring);

And if you're using a multidimensional array? Just nest your foreach string building statements.

Ally
  • 1,922
  • 1
  • 13
  • 21
  • WHY? Tell me whyyyyy I didn't thought on this before?? XD I have been working too much u.u THANKS =) – Metafaniel Jun 22 '12 at 17:25
  • It's more simple actually to build that with SimpleXML. Just noting. For some really advance mehtod including children, see: [How to update SimpleXMLElement using array](http://stackoverflow.com/q/14836849/367456) - just leaving it here for reference. – hakre Jun 24 '13 at 01:48