我的数据库中包含设置的XML对象结果。
我正在尝试访问特定settingName的值:
SimpleXMLElement Object
(
[settings] => Array
(
[0] => SimpleXMLElement Object
(
[settingName] => Test
[settingDescription] => Testing
[requireValue] => 1
[localeID] => 14
[status] => 1
[value] => 66
[settingID] => 5
)
[1] => SimpleXMLElement Object
(
[settingName] => Home Page Stats
[settingDescription] => Show the Top 5 Teammate / Teamleader stats?
[requireValue] => 0
[localeID] => 14
[status] => 0
[value] => SimpleXMLElement Object
(
)
[settingID] => 3
)
)
)
我尝试使用xPath并到目前为止:
$value = $fetchSettings->xpath("//settingName[text()='Test']/../value");
返回:
Array ( [0] => SimpleXMLElement Object ( [0] => 66 ) )
如何获得实际值,而不仅仅是另一个数组/对象?
对于上面的示例,最终结果将仅为66
。
参考方案
SimpleXMLElement::xpath()
返回“搜索结果”的纯PHP数组;如果找到任何结果,则第一个结果将始终是索引0
。
每个“搜索结果”都是一个SimpleXMLElement
对象,该对象具有一种神奇的__toString()
方法,用于获取节点的直接文本内容(包括CDATA,但包括子节点内的文本,等等)。调用它的最简单方法是使用(string)$my_element
;。 (int)$my_element
也会调用它,然后将结果转换为整数。
所以:
$xpath_results = $fetchSettings->xpath("//settingName[text()='Test']/../value");
if ( count($xpath_results) > 0 ) {
$value = (string)$xpath_results[0];
}
另外,由于DOM的对象模型更丰富,the DOMXPath
class可以返回元素和属性节点以外的结果。例如,您可以有一个以//text()
结尾的XPath表达式来引用节点的文本内容,而不是节点本身(SimpleXML会进行搜索,但是仍然会提供一个元素对象)。
缺点是使用起来比较冗长,但是幸运的是,您可以混合使用两组函数(使用dom_import_simplexml()
及其对应函数),因为它们具有相同的基础表示形式:
// WARNING: Untested code. Please comment or edit if you find a bug!
$fetchSettings_dom = dom_import_simplexml($fetchSettings);
$xpath = new DOMXPath($fetchSettings_dom->ownerDocument);
$value = $xpath->evaluate(
"//settingName[text()='Test']/../value/text()",
$fetchSettings_dom
);
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…
PHP:填写数组中的“空白” - php我有一个php数组(通过表单中的复选框值获取-您知道复选框仅在未设置时显示在_POST变量中)。Array ( [2] => 0,2 [3] => 0,3 ) 我需要一种方法来“填补” 0-5之间的差距。所以上面看起来像(用'-1'填充空白。我尝试用填充有'-1'的数组array_merge(),但这没用。Array ( [0] => -1…
PHP getallheaders替代 - php我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…
在xPath中的innerHTML? - php有没有一种方法可以检索div元素中包含的HTML(和JavaScript)? 参考方案 我不是PHP开发人员,但发现了这一点:function getNodeInnerHTML(DOMNode $oNode) { $oDom = new DOMDocument(); foreach($oNode->childNode as $oChild) { $oD…
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…