Php 在空子级之后添加XML子级
我想从对象页面创建一个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 = 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是区分大小写的。