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

Hitoshi Kawano kawano @ topics.or.jp
2004年 8月 19日 (木) 17:02:13 JST


河野です。

遅くなりましたが、結果報告です。
安高さんのサンプルを使い、実装できました。
ただ、phpのバージョンが4.2.2のためfile_get_contentsが
使えませんでした。4.3.0以上で使えるみたいです。そこを、
$xmlstrA = join('', file("fileA.xml"));
のようにしてみました。stringとして取り出すので、これでいいのかな?

fileA.xmlの先頭にエンティティ宣言があるのですが、そこにある
DTDがエレメントの置き換えを行った後、展開されてしまいます。
この展開をしないようにするにはどうすればいいのでしょうか?
ご存じの方がおられたら、教えてください。

> 単純に特定のエレメントを置き換えるなら、
> 以下のような感じでいかがでしょう。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>";
>
> ?>
>

_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/☆彡
河野 仁(Hitoshi Kawano)
E-Mail:kawano @ topics.or.jp
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/



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