我在PHP中使用Xpath - 我知道我的查询将返回0或1个结果。
如果返回1个结果,我不希望它作为数组 - 这就是现在返回的结果。我只是想要值而不必访问结果的[0]
元素并转换为字符串。
这可能吗?
答案 0 :(得分:3)
可以实现如果返回1个结果,我不希望它作为数组 - 这是返回的结果。我只是想要值而不必访问结果的[0]元素并转换为字符串。
通过返回文档顺序中第一个节点集中节点的字符串值,将节点集转换为字符串。如果节点集为空,则返回空字符串。
如果可能,返回类型化结果或包含与给定XPath表达式匹配的所有节点的DOMNodeList。
示例:强>
$dom = new DOMDocument;
$dom->loadXML('<root foo="bar"/>');
$xp = new DOMXPath($dom);
var_dump($xp->evaluate('string(/root/@foo)')); // string(3) "bar"
如果有一个内置的xpath方法来获取第一个和第一个节点值,那么这比写一个函数要好得多
您可以使用position
function:
position函数返回一个等于表达式求值上下文中上下文位置的数字。
示例:强>
$dom = new DOMDocument;
$dom->loadXML('<root><foo xml:id="f1"/><foo xml:id="f2"/></root>');
$xp = new DOMXPath($dom);
var_dump($xp->evaluate('string(/root/foo[position() = 1]/@xml:id)')); // string(2) "f1"
$dom = new DOMDocument;
$dom->loadXML('<root><foo xml:id="f1"/><foo xml:id="f2"/></root>');
$xp = new DOMXPath($dom);
var_dump($xp->evaluate('string(/root/foo[1]/@xml:id)')); // string(2) "f1"
请注意,使用position函数查询后代时,由于表达式的计算方式,可能会产生多个结果。
答案 1 :(得分:1)
使用'评估'代替'query',您可以执行诸如投射之类的操作。
另外,如果你只是厌倦了做很多次的事情,那就写一个能做到这一点的函数......这就是函数背后的整个想法吧?
答案 2 :(得分:0)
可能
if ($array[0]){
$string = $array[0];
}
如果$array[0]
是一个数组,则可以将字符串重命名为new_array
if ($array[0]){
$new_array = $array[0];
}
答案 3 :(得分:0)
您的问题表明您正在使用SimpleXML
,因为您谈论的是数组。但是很久以前你接受了回答DOMDocument
。在任何情况下,其他用户都在这里寻找 SimpleXML 中的解决方案,它的工作方式略有不同:
list($first) = $xml->xpath('//element') + array(NULL);
$first
中的元素(如果不是NULL
(对于没有元素)则仍然是SimpleXMLElement
类型(元素节点或属性节点,具体取决于xpath查询),但是你可以在PHP中将它转换为字符串并完成,或者只是在字符串上下文中使用它,就像 echo
一样:
echo $first;
答案 4 :(得分:-2)