simplexml 无需类型转换即可获取节点值

发布于 2024-10-12 13:05:32 字数 283 浏览 6 评论 0原文

有没有办法从 simplexml 对象获取节点值而不转换它?

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

在我看来这不是很漂亮,我正在寻找一种更干净的方法,但到目前为止没有找到任何东西!

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

提前致谢。

Is there any way to get a node value from a simplexml object without casting it?

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

This is not very beautiful in my opinion, I'm searching for a cleaner way but did not find anything so far!

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

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

留蓝 2024-10-19 13:05:32

不。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。如果您想熟悉它,请查看我之前关于使用 DOM 的一些答案

No. SimpleXml only exposes a very limited API to work with nodes. It's implicit API is considered a feature. If you need more control over the nodes, use 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"

The dom_import_simplexml function will convert the node from a SimpleXmlElement to a DOMElement, so you are still casting behind the scenes somehow. You no longer need to typecast explicitly though, when fetching the content from the DOMElement.

On a sidenote: personally, I find DOM superior to SimpleXml and I'd suggest not to use SimpleXml but DOM right away. If you want to familiarize yourself with it, have a look at some of my previous answers about using DOM.

最初的梦 2024-10-19 13:05:32

无需进行类型转换即可获取节点的值?当然可以! :3

class SimplerXMLElement extends SimpleXMLElement
{
    public function getValue()
    {
        return (string) $this;
    }
}

现在您只需使用 simplexml_load_string() 的第二个参数即可获得更简单的 XML 元素!

但更严重的是,节点就是节点。如果您需要将节点的值用作字符串、整数等,那么无论您是否亲自执行,都将在某一点上涉及类型转换。

Getting the value of a node without having to typecast it? Sure thing! :3

class SimplerXMLElement extends SimpleXMLElement
{
    public function getValue()
    {
        return (string) $this;
    }
}

Now you just have to use simplexml_load_string()'s second parameter to get even simpler XML elements!

More seriously though, a node is a node. If you need to use the value of a node as a string, integer and what not, it will involve typecasting at one point or another, whether you do it personally or not.

羁客 2024-10-19 13:05:32

但这是最安全的:)。您可以创建一个函数来递归地转换数组中的对象。早在我第一次开始在 PHP 中使用 XML 时,我就记得得出这样的结论:类型转换是最好的方法:)

But it is the safest :). You could create a function to recursively convert the object in an array. Way back when I first starte working with XML in PHP, I remember reaching the conclusion that type casting is just the best method :)

尛丟丟 2024-10-19 13:05:32

那么xpath方式呢?

$amount = $item->amount->xpath('text()');

What about xpath way?

$amount = $item->amount->xpath('text()');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文