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

Masayuki Ataka ataka @ alchemedia.jp
2004年 8月 19日 (木) 19:38:21 JST


安高です。

再現しました。
外部dtdファイルは展開されますね。

[fileA.xml]
-------------------------------------------------
<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE test [
	<!ENTITY % sample.dtd SYSTEM "sample.dtd">
	%sample.dtd;
]>
<EL1>
  <EL2>
     <EL3>aaa</EL3>
     <EL4>bbb</EL4>
  </EL2>
  <EL6>
     <EL7>ddd</EL7>
  </EL6>
</EL1>
-------------------------------------------------

[sample.dtd]
-------------------------------------------------
<!ENTITY aaa "testtest">
-------------------------------------------------

[出力結果]
-------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ENTITY % sample.dtd SYSTEM "sample.dtd">
<!ENTITY aaa "testtest">
]>
<EL1>
  <EL2>
     <EL3>aaa</EL3>
     <EL4>bbb</EL4>
     <EL5>ccc</EL5>
  </EL2>
  <EL6>
     <EL7>ddd</EL7>
  </EL6>
</EL1>

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

と、ここで気になったので、DOMに読み込んだ直後にechoしてみました。

[test2.php]
-------------------------------------------------
<?php

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

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

?>
-------------------------------------------------

[出力結果]
-------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ENTITY % sample.dtd SYSTEM "sample.dtd">
<!ENTITY aaa "testtest">
]>
<EL1>
  <EL2>
     <EL3>aaa</EL3>
     <EL4>bbb</EL4>
  </EL2>
  <EL6>
     <EL7>ddd</EL7>
  </EL6>
</EL1>
-------------------------------------------------

上記結果からすると、「DOMに読み込んだ段階」で展開されるようです。
勉強も兼ねてもう少し調べてみます。

河野さんも何かわかったらお教えください。


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

> 河野です。
> 
> Ushiroさん、安高さんありがとうございます。
> 
> $doc = domxml_open_file("fileA.xml");
> で読めました。
> 
> エンティティですが、次のようなサンプルになります。
> <!DOCTYPE test [
> 	<!ENTITY % sample.dtd SYSTEM "../DTD/sample.dtd">
> 	%sample.dtd;
> ]>
> ここで、sample.dtdが展開されてしまうのですが、もしおわかりでしたら
> 教えてください。
> 
> > > fileA.xmlの先頭にエンティティ宣言があるのですが、そこにある
> > > DTDがエレメントの置き換えを行った後、展開されてしまいます。
> > > この展開をしないようにするにはどうすればいいのでしょうか?
> >
> > 以下のような感じで先日のテストスクリプト([PHP-users 23010])で実験
> > してみましたが(php4.3.4)、展開はされませんでした。
> >
> > [fileA.xml]
> > -------------------------------------------------
> > <?xml version = "1.0" encoding="UTF-8"?>
> > <!DOCTYPE test [
> > <!ENTITY aaa SYSTEM "fileC.xml">
> > <!ENTITY bbb "hello">
> > ]>
> > <EL1>
> >   <EL2>
> >      <EL3>&aaa;</EL3>
> >      <EL4>&bbb;</EL4>
> >   </EL2>
> >   <EL6>
> >      <EL7>ddd</EL7>
> >   </EL6>
> > </EL1>
> > -------------------------------------------------
> >
> > [fileB.xml]
> > -------------------------------------------------
> > <?xml version = "1.0" encoding="UTF-8"?>
> > <!DOCTYPE test [
> > <!ENTITY aaa SYSTEM "fileC.xml">
> > <!ENTITY bbb "hello">
> > ]>
> > <EL1>
> >   <EL2>
> >      <EL3>&aaa;</EL3>
> >      <EL4>&bbb;</EL4>
> >      <EL5>&bbb;</EL5>
> >   </EL2>
> > </EL1>
> > -------------------------------------------------
> >
> >
> > [fileC.xml]
> > -------------------------------------------------
> > <?xml version = "1.0" encoding="UTF-8"?>
> > <TT>
> > <XX>ENT</XX>
> > </TT>
> > -------------------------------------------------
> >
> > [出力結果]
> > -------------------------------------------------
> > <?xml version="1.0" encoding="UTF-8"?>
> > <!DOCTYPE test [
> > <!ENTITY aaa SYSTEM "fileC.xml">
> > <!ENTITY bbb "hello">
> > ]>
> > <EL1>
> >   <EL2>
> >      <EL3>&aaa;</EL3>
> >      <EL4>&bbb;</EL4>
> >      <EL5>&bbb;</EL5>
> >   </EL2>
> >   <EL6>
> >      <EL7>ddd</EL7>
> >   </EL6>
> > </EL1>
> > -------------------------------------------------
> >
> > こういうことではなくて?
> > もう少し具体的なサンプルがあるとわかりいいかもしれません。
> 
> _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/☆彡
> 河野 仁(Hitoshi Kawano)
> E-Mail:kawano @ topics.or.jp
> _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3


_______________________________________________________
Masayuki Ataka
e-mail:ataka @ alchemedia.jp
TEL [81] 3-3560-5678 Ext.304
ALCHEMEDIA INC.
Kimbun Bldg. 5F
6-14-3 Akasaka Minato-ku
Tokyo, JAPAN 107-0052



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