Php 在空子级之后添加XML子级

Php 在空子级之后添加XML子级,php,simplexml,Php,Simplexml,我想从对象页面创建一个XML文档,其中包含一些关于打印页面的信息。我正在使用以下代码: $xml = new \SimpleXMLElement('<page/>'); $xml->addChild( "pageid", $page->id ); $xml->addChild( "keyword", $page->page_name ); $elements = $xml->addChild( "elements" ); foreach ( $pag

我想从对象页面创建一个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 );
    }
}
$xml=new\simplexmlement(“”);
$xml->addChild(“pageid”,$page->id);
$xml->addChild(“关键字”,$page->page\u名称);
$elements=$xml->addChild(“元素”);
foreach($page->elements as$page\u element){
$element=$elements->addChild(“元素”);
$element->addChild(“类型”,$page_元素[“类型”]);
$element->addChild(“id”,$page_元素[“id”);
$element->addChild(“parentContainerID”,$page\u元素[“parent\u container\u id]”);
$element->addChild(“parentContainerType”,$page\u元素[“parent\u container\u type]”);
$element->addChild(“宽度”,$page\u元素[“宽度”]??0);
$element->addChild(“高度”,$page_元素[“高度”]??0);
$user_def_fields=$element->addChild(“userdef字段”);
如果(isset($page_元素[“custom_字段]])){
foreach($page[“custom\u fields”]为$custom\u field\u name=>$custom\u field\u value){
$user_def_field=$user_def_fields->addChild(“字段”);
$user_def_field->addChild(“标签”,$custom_field_name);
$user_def_field->addChild(“值”,$custom_field_value);
}                        
}
}
$states=$element->addChild(“ArticleStates”);
foreach($page_元素[“article_states”]作为$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>

组
1234
2345
文章
0
0
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>
$user_def_fields = $element->addChild( "UserDefFields", " " );

组
1234
2345
文章
0
0

很简单。。。但确实很奇怪。 只需添加如下空间:

<element>
  <type>group</type>
  <id>1234</id>
  <parentcontainerid>2345</parentcontainerid>
  <parentcontainertype>article</parentcontainertype>
  <width>0</width>
  <height>0</height>
  <userdeffields></userdeffields>
  <articlestates></articlestates>      
</element>
$user_def_fields = $element->addChild( "UserDefFields", " " );

我只需要记住在解析XML时使用trim函数。。。JSON ftw:-)

我不知道
$page\u元素[“article\u states”]
是否为空与此有关。。。添加
articlestates
元素发生在该属性循环之前。你能展示一个重现这一点的工作示例吗?请回复上面的@CBroe。出现在任何循环之外的
$states=$element->addChild(“ArticleStates”)
行清楚地表明
必须作为子对象输出到
,而不是
。您发布的示例与代码不一致,这一点可以在代码中看到,但在XML中看不到,XML是区分大小写的。