有没有办法从simplexml
对象获取节点值而不用投射它?
$amount = (int)$item->amount;
在我看来这不是很漂亮,我正在寻找一种更清洁的方式,但到目前为止还没找到任何东西!
//wouldn't this be nice?
$amount = $item->amount->getValue();
提前致谢。
答案 0 :(得分:4)
没有。 SimpleXml
仅公开一个非常有限的API来处理节点。它的隐式API被认为是一种功能。如果您需要对节点进行更多控制,请使用DOM
:
$sxe = simplexml_load_string(
'<root><item><amount>10</amount></item></root>'
);
$node = dom_import_simplexml($sxe->item->amount);
var_dump($node->nodeValue); // string(2) "10"
dom_import_simplexml
函数会将节点从SimpleXmlElement
转换为DOMElement
,因此您仍然会以某种方式在幕后投影。当从DOMElement
获取内容时,您不再需要明确地进行类型转换。
在旁注:我个人认为DOM
优于SimpleXml
,我建议不要立即使用SimpleXml
,而是DOM
。如果您想熟悉它,请查看some of my previous answers about using DOM。
答案 1 :(得分:1)
获取节点的值而不必对其进行类型转换?当然可以! :3
class SimplerXMLElement extends SimpleXMLElement
{
public function getValue()
{
return (string) $this;
}
}
现在您只需使用simplexml_load_string()
的第二个参数即可获得更简单的 XML元素!
但更严重的是,节点是一个节点。如果你需要将节点的值用作字符串,整数和不是,那么无论你是否亲自进行,它都会涉及到某种程度的类型转换。
答案 2 :(得分:0)
但它是最安全的:)。您可以创建一个函数来递归转换数组中的对象。当我第一次开始使用PHP中的XML时,我记得得出的结论是类型转换只是最好的方法:)
答案 3 :(得分:0)
xpath方式怎么样?
$amount = $item->amount->xpath('text()');