【问题标题】:Check for empty element检查空元素
【发布时间】:2013-06-14 00:07:33
【问题描述】:

对于这个 XML:

<row>
   <entry XY="1" al="23" se="5" ag="fgh"> </entry>
   <entry XY="1" al="23" se="5" ag="fgh">Content1</entry>
   <entry XY="1" al="23" se="5" ag="fgh">Content2</entry>
   <entry XY="1" al="23" se="5" ag="fgh"> </entry>
   <entry XY="1" al="23" se="5" ag="fgh">Content3</entry>
</row>

我有以下循环:

foreach ($toc_element->entry as $toc_element_line) {

  if ($toc_element_line->xpath('/*[text()]')) {

       array_push($arr, $toc_element_line); 

  }

}

我正在尝试测试当前元素是否为空。 Object 本身永远不会为空,因为可能为空的元素始终具有属性(我不在乎)。

XPath 方法(我显然很陌生)是否正确?如果是这样,我会怎么写?

提前非常感谢。 (我知道stackoverflow上有一些这样的问题,但我不太明白)

【问题讨论】:

  • 你可能想看看这个:stackoverflow.com/questions/16471073/…
  • 你没有给出任何 XML 示例,所以我不太确定,但也许 php.net/strlen 是你要找的。​​span>
  • 是的,您的 XPath 看起来不错。它将仅在存在文本作为子节点的情况下返回元素。
  • 我添加了一个 XML 片段以更好地解释情况

标签: php xpath xml-parsing simplexml


【解决方案1】:

&lt;entry&gt; &lt;/entry&gt; 不为空,它包含' '

与空的&lt;entry&gt;&lt;/entry&gt;&lt;entry /&gt; 形成对比。

因此,以您的 XML 为例,使用 xpath 创建一个非空且非 ' ' 的节点数组:

$xml = simplexml_load_string($x); // assume XML in $x
$nodes = $xml->xpath("//entry[text() and text()!=' ']");
foreach ($nodes as $node) echo "$node<br />"; // output

看到它的工作:http://3v4l.org/8Y7uN

【讨论】:

    猜你喜欢
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多