为什么PHP SimpleXML children()为空标记返回null?
我们有以下示例XML:为什么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>
<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。