2011-01-25 6 views
0

私はXMLを解析する際に最初のショットを撮ろうとしている多忙なPHP開発者です。私は基本を理解し、ノードをループしてそれらを印刷し、属性を出力します。私が失った1つのことは、XML文書のタグ名の条件を調べて書き込む方法です。PHP SimpleXML質問... XMLの各行を繰り返し処理するタグを使用する

は、だから私は何をする必要があるかxmlファイルの各行を読んでされています

は、その場合は、オープン<level>タグを決定し、その<file>タグの決定と<li>file</li> と交換<UL> と交換してかどうかを判断</level>タグを置き換えてください。</ul>

レベルタグには、それらを区別する属性があります。私は単に<ul>エコーカントこれのために....

<ul> 
    <li>Filename1</li> 
    <li>Filename2</li> 
    <li>Filename3</li> 
    <li>Filename4</li> 
</ul> 
<ul> 
    <li>Filename1</li> 
    <li>Filename2</li> 
    <li>Filename3</li> 
    <li>Filename4</li> 
</ul> 
<ul> 
    <ul> 
      <li>Filename1</li> 
      <li>Filename2</li> 
      <li>Filename3</li> 
      <li>Filename4</li> 
    </ul> 
</ul> 

お知らせネストされた<level>タグ:

XMLはこの

<level dirname="1"> 
    <file>Filename1</file> 
    <file>Filename2</file> 
    <file>Filename3</file> 
    <file>Filename4</file> 
</level> 
<level dirname="2"> 
    <file>Filename1</file> 
    <file>Filename2</file> 
    <file>Filename3</file> 
    <file>Filename4</file> 
</level> 
<level dirname="3"> 
    <level dirname = "5"> 
      <file>Filename1</file> 
      <file>Filename2</file> 
      <file>Filename3</file> 
      <file>Filename4</file> 
    </level> 
</level> 

ようになり、それはこのように見て終わる必要があります</ul>とループして<li>タグをループします。私はxmlファイルの各要素を取り、それを置き換えるタグを決めなければなりません。

助けがあれば助かります。

おかげ

クレイグ

+0

何をしているかによって、XSLTを見てみるといいでしょう。 XML文書をXMLまたはHTMLに変換します。あなたが初心者であれば学ぶのは難しいかもしれません。 –

答えて

1

あなたは再帰関数を作成する必要があります。これはネストされたレベルがあるかどうかをチェックし、そうであれば、同じファンクションでそれらを生成します。

ファイルノードを(文字列)でキャストして印刷する必要があることに注意してください。

function printLevel(SimpleXMLElement $e){ 
    $re = ''; 
    if(!empty($e->level)){ // checking for nested levels 
     foreach($e->level as $lvl){ 
      $re .= '<ul>'.printLevel($lvl)."</ul>\n"; 
     } 
    } 

    if(!empty($e->file)){ // checking for files 
     foreach($e->file as $file){ 
      $re .= '<li>'.(string)$file."</li>\n"; 
     } 
    } 
    return $re; 
} 

$xml = new SimpleXMLElement($xmlText); 
echo printLevel($e); 

これは機能します。しかし、あなたのXMLは整形式ではありません!カバールート要素を追加し、>を!に置き換えます)。

+0

こんにちは、すばやい応答のために感謝...私は今日これをテストできませんが、午前中に見てみて.....そしてもちろんXMLにはルートタグなどがあります...私はそれを入力するだけでしたあなたのアイデア – Craig

+0

まあ、それは期待された結果を出します。しかし、$ e-> attributes()を使う必要があるため、属性を扱うことはできません。あなたはPHPで非常に良いマニュアルを見つけることができます。私の頭痛の原因となった唯一のことは、要素のテキスト値(属性)を取得することです:あなたは(string)$ elementのようにする必要があります! –

関連する問題