0

私はこの問題を調査してきましたが、必要なものが見つかりません。それは難しいことではないはずです、おそらくそれは構文の問題です=)

次のような関数内に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);

XMLを保存すると、次の$sxe->asXml('xml/myGreatFile.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>

この反復ノードを作成するにはどうすればよいですか?変数の場合と同じように、文字列内でPHP関数を連結しようとしましsimplexml_load_stringたが、不可能なようです。

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

もちろん私の構文は間違っていますが、この反復ノードを何らかの方法で作成したいと思います。おそらくサイクルを使用し、文字列に渡す代わりにハッシュ配列を直接使用します。

4

1 に答える 1

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文字列構築ステートメントをネストするだけです。

于 2012-06-22T17:10:53.420 に答える