[PHP-users 23010]Re: XML DOM処理で要素追加

Masayuki Ataka ataka @ alchemedia.jp
2004年 8月 18日 (水) 16:44:24 JST


安高です。

単純に特定のエレメントを置き換えるなら、
以下のような感じでいかがでしょう。php4.3.4で確認済みです。

------------------------------------------------
<?php

//fileA(更新する側)のDOM定義
$xmlstrA=file_get_contents("fileA.xml");
$domA=domxml_open_mem($xmlstrA);

//fileB(更新する側)のDOM定義
$xmlstrB=file_get_contents("fileB.xml");
$domB=domxml_open_mem($xmlstrB);

//xpathコンテキストをそれぞれ定義
$ctxA=xpath_new_context($domA); 
$ctxB=xpath_new_context($domB); 

//まず、fileAからEL2以下のノードを取得
$xarrA=$ctxA->xpath_eval("/EL1/EL2");
$xelA=$xarrA->nodeset[0];

//次に、fileBからEL2以下のノードを取得
$xarrB=$ctxB->xpath_eval("/EL1/EL2");
$xelB=$xarrB->nodeset[0];

//置換
$xelA->replace_node($xelB);

//結果確認
echo "<PRE>";
$xmlfile = $domA->dump_mem(true);
echo htmlentities($xmlfile);
echo "</PRE>";

?>

------------------------------------------------

Ushiroさんがご指摘のとおり、確かにマニュアルもありますが、
replace_node
あたりはパラメータの説明もないので、非常にわかりにくい部分だと思います。
phpやlibxmlのバージョン違いで動作もかなり異なるみたいですし。

私も同じようなことをやっておりますので、今後ともよろしくお願いします。



"Hitoshi Kawano" <kawano @ topics.or.jp> wrote:

> 河野と申します。
> 
> XMLファイルをphpとlibxml2でDOM処理を行っています。
> わからないところがあるので、どなたか教えてください。
> 
> A,B2つのXMLファイルがあります。Aのなかの要素を
> 変更するために、BというXMLファイルが新たに作られます。
> その追加になった要素をAのXMLファイルに反映するには
> どのようにすればよいかが分かりません。
> Bのなかの要素を取得し、Aのなかの要素に置き換えればよいと
> 思うのですが、それをどうやってPHPで実装するかが分かりません。
> どなたか、おわかりの方教えてください。
> 
> ファイルA
> <EL1>
>   <EL2>
>      <EL3>aaa</EL3>
>      <EL4>bbb</EL4>
>   </EL2>
>   <EL6>
>      <EL7>ddd</EL7>
>   </EL6>
> </EL1>
> 
> ファイルB
> <EL1>
>   <EL2>
>      <EL3>aaa</EL3>
>      <EL4>bbb</EL4>
>      <EL5>ccc</EL5>
>   </EL2>
> </EL1>
> 
> ファイルBの要素EL2を取得し、ファイルAの要素EL2とすべて
> おきかえればよいと思うのですが。。。
> 
> 環境は、以下のようなものです。
> RedHat Linux 8.0
> apache 1.3.27
> php 4.2.2
> libxml2-2.4.30
> 




PHP-users メーリングリストの案内