【问题标题】:Why does PHP SimpleXML children() returns null for empty tag?为什么 PHP SimpleXML children() 为空标签返回 null?
【发布时间】:2015-09-21 07:26:19
【问题描述】:

我们有以下示例 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>";

此代码工作正常,除了:对于标签

<queue_letter></queue_letter>    

对于这个标签 $child1->children() 返回 null;但是如果我在标签之间输入空格

<queue_letter>     </queue_letter> 

或换行符,或任何其他字符,标签被返回。

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

谢谢。

【问题讨论】:

  • 问题中提供的代码对我来说很好:3v4l.org/uA6Fm(虽然整个事情可以简化为$xml-&gt;asXML(),但我认为你需要以这种方式循环它是有原因的.)
  • 哦,仅供参考,&lt;xml&gt; 是保留名称,因此上述 XML 在技术上是无效的。同样,可能只是您匿名示例的方式,但如果您实际使用该标签,我建议您更改它以避免以后出现问题。
  • 谢谢。很有用。

标签: php xml null simplexml children


【解决方案1】:

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

&lt;queue_letter&gt;&lt;/queue_letter&gt;&lt;queue_letter /&gt; 相同,而且这个标签没有子标签,所以它总是返回 null

【讨论】:

  • 谢谢。但我想访问 标签本身并获得它的名字。问题是 - 整个标签为空。
【解决方案2】:

我能够通过以下方式解决这种情况:我的 PHP 服务器包含 resin.jar 我刚刚下载了它的最新版本并替换了原来的版本。 一切正常。看看这个:Resin web server

【讨论】:

  • 我对此表示反对,因为没有解释什么是 resin.jar,你在哪里找到它,或者它与问题有什么关系。 PHP 组件通常不分布在 JAR 文件中,也不依赖于 JAR 文件。
  • 我还是不明白这与 PHP 和 SimpleXML 有什么关系。您使用的是Quercus 而不是PHP 的正常分布,这是他们在SimpleXML 实现中的一个错误?
  • 是的,但我不确定这是否是早期版本中的错误,或者他们只是改变了函数的行为。因为它的早期版本不允许检索内容为空的 xml 标记,但是,显然必须返回内容为空的标签 - 我认为这是一个错误。
猜你喜欢
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2022-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多