使用simplexml_load_string,循环和变量从散列数组创建重复节点

时间:2012-06-22 16:49:24

标签: php xml hash multidimensional-array simplexml

=)我需要你的帮助才能完成一项简单的任务。我一直在寻找,但我找不到我需要的东西。这应该不难,可能是语法问题=)

我在函数中创建一个表示XML的字符串,如下所示:

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

变量的内容在这两个变量中都是像abc,def,ghi这样的普通字符串,我以这种方式从哈希中获取:

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);

当我使用$sxe->asXml('xml/myGreatFile.xml');保存XML时,我得到类似的内容:

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

这很好但是现在我的新要求我需要一个与此类似的结果:

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

如何创建此重复节点??? 我尝试在simplexml_load_string字符串中连接PHP函数,就像我对变量一样,但似乎不可能:

$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>
');

当然我的语法是错误的,但我想以某种方式创建这个重复节点,可能是一个循环,可能直接使用我的哈希数组,而不是将其传递给字符串。

1 个答案:

答案 0 :(得分:1)

答案很简单:在simplexml函数之外构建字符串变量,然后在函数中使用它。

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

  $sxe = simplexml_load_string($mystring);

如果您使用的是多维数组?只需嵌套foreach字符串构建语句。