[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 メーリングリストの案内