【问题标题】:php xml object comparephp xml对象比较
【发布时间】:2016-04-20 12:26:38
【问题描述】:

我从 PHP 中的 XML 对象获取数据并使用“==”运算符,但我们没有得到相等性。这似乎是一个非常基本的问题,但我在任何地方都找不到。

小例子:

<?php
// Load the file
$xmlData = "<?xml version='1.0' encoding='UTF-8' ?>
<root>
<a>animalia</a>
<b>arthropoda
<parent>animalia</parent>
</b>
</root>";

$xml=simplexml_load_string($xmlData) or die("Error: Cannot create object");
print_r($xml);

//Extract the data

$x=$xml->a;
$y=$xml->b->parent;

// Test whether they are equal

if ($x==$y) {
  echo $x." = ".$y;
}
else {
  echo "'".$x."' does not equal '".$y."'";
}
?>

这给了我结果:'animalia' 不等于 'animalia'

注意,如果我写任何一个

print_r($x); 

print_r($x);

我得到输出:SimpleXMLElement Object ( [0] => animalia )

所以问题是,为什么这些不被认为是平等的?提前致谢。

【问题讨论】:

  • trim()他们俩再试一次。

标签: php xml-parsing


【解决方案1】:

您不是在比较两个字符串,而是在比较两个不同的节点(&lt;a&gt;animalia&lt;/a&gt; vs &lt;parent&gt;animalia&lt;/parent&gt;)。

它们是两个不同的SimpleXML 对象。

要比较节点值,请将对象转换为字符串:

if( (string) $x == (string) $y )

或:

if( $x->__toString() == $y->__toString() )

【讨论】:

  • 感谢您对我的最小示例的清晰解释和方法。正如 Manjeet Barnala 建议的那样,我的真实示例也会产生空白,因此我需要修剪,我想这也会将它们转换为字符串作为副产品。
  • 是的。 trim 和其他字符串方法将对象转换为字符串。当一个对象(不仅仅是 SimpleXML objs)有一个__toString() 方法时,它会在必要时被调用。
【解决方案2】:

trim — 从字符串的开头和结尾去除空格(或其他字符)

<?php
// Load the file
$xmlData = "<?xml version='1.0' encoding='UTF-8' ?>
<root>
<a>animalia</a>
<b>arthropoda
<parent>animalia</parent>
</b>
</root>";

$xml=simplexml_load_string($xmlData) or die("Error: Cannot create object");
print_r($xml);

//Extract the data
$x=$xml->a;
$y=$xml->b->parent;
// Test whether they are equal
if (trim($x)==trim($y)) {
  echo $x." = ".$y;
}
else {
  echo "'".$x."' does not equal '".$y."'";
}
?>

输出:

animalia = animalia

了解XML Whitespaces

【讨论】:

  • 感谢这对我有用,还有涉及更多的真实示例。我想 trim 命令也将它们转换为字符串,这也很重要。再次感谢。
  • @TimX,欢迎亲爱的很高兴为您提供帮助 .. 如果任何答案对您有帮助,请不要忘记为答案投票谢谢...
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多