simplexml获取没有类型转换的节点值

时间:2011-01-18 09:54:26

标签: php casting simplexml

有没有办法从simplexml对象获取节点值而不用投射它?

$amount = (int)$item->amount;

在我看来这不是很漂亮,我正在寻找一种更清洁的方式,但到目前为止还没找到任何东西!

//wouldn't this be nice?
$amount = $item->amount->getValue();

提前致谢。

4 个答案:

答案 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()');