2017-07-05 3 views
0

オブジェクトページから、印刷ページに関する情報を含むXML文書を作成したいとします。私はこのコードを使用しています:空の子の後にXML子を追加する

$xml = new \SimpleXMLElement('<page/>'); 
$xml->addChild("pageid", $page->id); 
$xml->addChild("keyword", $page->page_name); 

$elements = $xml->addChild("elements"); 

foreach ($page->elements as $page_element) { 
    $element = $elements->addChild("element"); 
    $element->addChild("type", $page_element["type"]); 
    $element->addChild("id", $page_element["id"]); 
    $element->addChild("parentContainerID", $page_element["parent_container_id"]); 
    $element->addChild("parentContainerType", $page_element["parent_container_type"]); 
    $element->addChild("Width", $page_element["width"] ?? 0); 
    $element->addChild("Height", $page_element["height"] ?? 0); 
    $user_def_fields = $element->addChild("UserDefFields"); 

    if (isset($page_element["custom_fields"])) { 
      foreach ($page["custom_fields"] as $custom_field_name => $custom_field_value) { 
       $user_def_field = $user_def_fields->addChild("field"); 
       $user_def_field->addChild("label", $custom_field_name); 
       $user_def_field->addChild("value", $custom_field_value); 
      }       
     } 
    } 

    $states = $element->addChild("ArticleStates"); 

    foreach($page_element["article_states"] as $state) { 
     $states->addChild("articlestate", $state); 
    } 
} 

これは動作します - しかし、article_statesが空のとき、私はこれを取得:

<element> 
    <type>group</type> 
    <id>1234</id> 
    <parentcontainerid>2345</parentcontainerid> 
    <parentcontainertype>article</parentcontainertype> 
    <width>0</width> 
    <height>0</height> 
    <userdeffields> 
    <articlestates></articlestates> 
    </userdeffields> 
</element> 

articlesstatesタグがuserdeffieldsの内側にあります。それは間違っている、それはこのようにする必要があります:

<element> 
    <type>group</type> 
    <id>1234</id> 
    <parentcontainerid>2345</parentcontainerid> 
    <parentcontainertype>article</parentcontainertype> 
    <width>0</width> 
    <height>0</height> 
    <userdeffields></userdeffields> 
    <articlestates></articlestates>  
</element> 

H

実にシンプルな...しかし、奇妙な
+1

:-)私はどのように '$ page_elementかどうかが表示されません["article_states"] 'が空であるかどうかは関係ありません。このプロパティがループされる前に' articlestates'要素が追加されます。これを再現する実際の例を表示できますか? – CBroe

答えて

0

。 はちょうどこのようにスペースを追加します。

$user_def_fields = $element->addChild("UserDefFields", " "); 

私はXMLを解析するときトリム機能を使用することを覚えている... JSON FTW

+0

上記の@CBroeにお答えください。ループの外側で発生する '$ states = $ element-> addChild(" ArticleStates ")行は、' 'が' 'と**' ** ではない子として出力する必要があります。あなたの投稿された例は、コードでは大文字のラクダの大文字小文字の区別に見られるようにコードには整列しませんが、XMLではなく、XMLでは大文字と小文字が区別されます。 – Parfait

関連する問題