如何使用 SimpleXML 检查元素是否存在?
我有以下内容(简化的 XML):
<?xml version="1.0" encoding="UTF-8" ?>
<products>
<product>
<artnr>xxx1</artnr>
</product>
</products>
以及以下内容(再次简化的 PHP 代码):
$xml= @simplexml_load_file($filename);
foreach ($xml->product as $product) {
if (!$this->validate_xml_product($product)) {
continue;
}
}
function validate_xml_product($product)
{
if (!property_exists('artnr', $product)) {
// why does it always validate to true?
}
}
由于某种原因,该产品从未验证。
property_exists 不是查找 $product 中是否存在 artnr 元素的正确方法吗?
I have the following (simplified XML):
<?xml version="1.0" encoding="UTF-8" ?>
<products>
<product>
<artnr>xxx1</artnr>
</product>
</products>
And the following (again simplified PHP code):
$xml= @simplexml_load_file($filename);
foreach ($xml->product as $product) {
if (!$this->validate_xml_product($product)) {
continue;
}
}
function validate_xml_product($product)
{
if (!property_exists('artnr', $product)) {
// why does it always validate to true?
}
}
For some reason the product never validates.
Isn't property_exists the correct way of finding out whether there is an artnr element in $product?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
代码中参数的顺序是相反的。正确的是首先是对象,然后是属性名称:
显然这仅适用于“真实”属性。如果该属性是使用 __get 方法实现的,那么这也不起作用。
The order of parameter in your code is reversed. Correct is first the object then the property-name:
And apparently this only works for "real" properties. If the property is implemented using the
__get
-Method this won't work either.我认为这些论点是交叉的。第一个参数应该是类,第二个参数是属性...
http://php. net/manual/de/function.property-exists.php
I think the arguments are crossed. First param should be the class, second the property...
http://php.net/manual/de/function.property-exists.php
使用:
Use: