PHP 5.5.9-1ubuntu4.3 で XML の ID タグを利用する場合の注意点

この記事は公開されてから時間が経っています

SVG の text タグなどに id 属性を付けてノードの値を変化させようなどと思っていたら、
どうも、ID に設定が必要になったらしいので、忘れないうちに書き留めておこう…


getElementById を呼んでも NULL が帰ってくる場合、
マニュアルの DOMDocument::getElementById を確認してみてください

この関数を動作させるには、何らかの ID 属性を DOMElement::setIdAttribute で設定するか、あるいは DTD で ID 型の属性を定義する必要があります。 後者の場合は、 DOMDocument::validate あるいは DOMDocument::$validateOnParse を使用してドキュメントを検証する必要があります

と有ります

その他、色々ありますので、こんな感じです
※ マトリックス状のフォームのデータを埋める感じです..

$svg    = new DOMDocument("1.0","UTF-8");
$svg->validateOnParse = true;

@$svg->load("form.svg");
$svg->preserveWhiteSpace = false;

for( $i=1 ; $i<32 ; $i++ ){
    for( $j=1; $j<=11; $j++ ){
        $cellID    = sprintf("id%02d%02d",$i,$j);
        $node    = $svg->getElementById($cellID);
        …

多分、昔からの習性で、

  $svg = DOMDocument::Load("form.svg");

と、してから一連の処理に突入すると思いますけれど、その後で validateOnParse を設定しても駄目なようです

また、load を呼ぶと警告が発せられる場合がありますので @load にします

キチンと id でノードを呼び出せない場合は、この辺りを確認してみてください > 物覚えの悪い自分 ^^;

またしても、教訓が活きてない…
だめだな…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。