2012-03-12 39 views
1

コードからXML上の名前空間で作業する必要があります。例えば:XML上の名前空間の使用

<system:include file="./test.php" cache="true" /> 

それは、コンテンツの最終的な出力になりますが、前にクライアントに送信(system:includeのような)特別なタグを処理する必要があります。

最終出力のすべての要素をの名前空間タグまたは特定のものについて検索するようにします。問題は、DOMDocumentを使用してXMLのように読むと、名前空間宣言(Namespace prefix system on include is not defined in Entity)に問題があることです。

私のテストコードは次のとおりです。

<?php 

    $document = new DOMDocument(); 
    $document->loadXML(' 
     <system:include file="./test.php" cache="true" /> 
    '); 

    foreach($document->childNodes as $node) { 
     var_dump($node->nodeName); 
    } 

?> 

私はいくつかの特別なタグを処理する必要があり、実際のHTMLに変換しますので、私はそれを行う必要があります。例:convert <b><strong>(ほんの一例!)タグを使用して特定のページをインクルードしてキャッシュする方がよいでしょう。

もう一つの例:

<h7>Hello World!</h7> 

がに変換します。

<div class="h7">Hello World!</div> 

注:ob内容は、この特別なタグで検索する特定の方法に送信されます。だから私は前に名前空間の宣言をすることができるかどうか分からない(難しく、ゆっくりと、おそらく)。

Bye!

答えて

2

私は、XMLにルート要素を指定してから、ルート要素内にシステム名前空間を宣言すると動作させることができます。 <root xmlns:system="system">...</root>

<?php 

function dump($root) { 
    foreach($root->childNodes as $node) { 
     echo $node->nodeName; 
     echo "\n"; 
     dump($node); 
    } 
} 

$doc = new DOMDocument(); 
$doc->loadXML('<root xmlns:system="system"><system:include file="./test.php" cache="true" /></root>'); 

dump($doc); 

?> 
+0

良い...しかし、私は名前空間が何であるかわからないのですか?なぜなら私は 'X'名前空間を持つことができ、私はそれぞれの名前を知らないからです。ちょっと助けてください...可能でない場合、私は私が何ができるかを知っていると思います... –

+0

DOMDocumentは、未知の名前空間のXML文書を警告なしに解析する方法がわかりません。 $ doc-> loadXML( '...'、LIBXML_NOERROR)でエラーを抑制することができます。 – Martin