为什么PHP SimpleXML children()为空标记返回null?

为什么PHP SimpleXML children()为空标记返回null?,php,xml,null,simplexml,children,Php,Xml,Null,Simplexml,Children,我们有以下示例XML: <xml> <call> <branchId>2</branchId> <item_main_display>1</item_main_display> <workstation_Id>1</workstation_Id> <formatted_ticket_number>203</for

我们有以下示例XML:

<xml>
    <call>
        <branchId>2</branchId>
        <item_main_display>1</item_main_display>
        <workstation_Id>1</workstation_Id>
        <formatted_ticket_number>203</formatted_ticket_number>
        <queue_letter></queue_letter>
        <service_Id>17</service_Id>
        <service_Name>konsultanti Queue</service_Name>
        <isflashing>false</isflashing>
        <workstation_Name>ServicePoint_D924</workstation_Name>
        <callTime>1442583923157</callTime>
        <timestamp>1442583923</timestamp>
        <eventTime>2015-09-18T17:45:23.114+0400</eventTime>
    </call>
</xml>
使用下面的PHP代码,我们尝试访问所有xml节点

$xml=simplexml_load_file("sample.xml");

$xmlStr="";
$xmlStr.="<xml>";

foreach($xml->children() as $child1)
{
    $xmlStr.="<". $child1->getName().">";
    foreach($child1->children() as $child2){ 
        $xmlStr.="<". $child2->getName() .">". $child2 ."</". $child2->getName() .">";
    } 
    $xmlStr.="</". $child1->getName().">";
}
$xmlStr.="</xml>";
此代码工作正常,除了:For tag

<queue_letter></queue_letter>    
对于此标记$child1->children返回null;但是如果我在标签之间输入空格

<queue_letter>     </queue_letter> 
或换行符或任何其他字符,则返回标记

这是正常的行为吗?如何返回不包含字符的子标记


谢谢。

如果标签之间有空格,标签不是空的-他有一个文本节点作为子节点


与相同,并且该标记没有子项,因此它将始终返回null

我可以通过以下方式解决此问题:我的PHP服务器包含resin.jar 我刚下载了它的最新版本,并替换了原来的版本。
一切都很完美。查看此链接:

谢谢。但我想访问标记本身并获取其名称。问题是-整个标记是空的。问题中提供的代码对我来说很好:虽然整个过程可以简化为$xml->asXML,但我认为有一些原因需要这样循环。哦,仅供参考,是一个保留名称,因此上面的xml在技术上是无效的。同样,可能只是你匿名的方式,但是如果你真的使用了这个标签,我建议你修改它以避免以后出现问题。谢谢。非常有用。我对此投反对票,因为没有解释什么是resin.jar,在哪里找到它,或者它与这个问题有什么关系。PHP组件通常不分布在JAR文件中,也不依赖JAR文件。我仍然不明白这与PHP和SimpleXML有什么关系。您使用的是PHP而不是正态分布,这是他们SimpleXML实现中的一个错误?是的,但我不确定这是早期版本中的错误,还是他们只是更改了函数的行为。因为早期版本不允许检索包含空内容的xml标记,但是,显然,带有空内容的标签必须返回-我认为这是一个bug。