使用 xpath 从数组中获取元素

发布于 2024-12-07 04:37:44 字数 1490 浏览 1 评论 0原文

我有以下 SimpleXML 对象:

SimpleXMLElement Object
(
[@attributes] => Array
    (
        [status] => ok
    )

[a] => SimpleXMLElement Object
    (
        [b] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [c] => Google
                        [d] => GOOG
                        [e] => http://www.google.com
                    )

                [1] => SimpleXMLElement Object
                    (
                        [c] => Yahoo
                        [d] => YHOO
                        [e] => http://www.yahoo.com
                    )

                [2] => SimpleXMLElement Object
                    (
                        [c] => Microsoft
                        [d] => MSFT
                        [e] => http://www.microsoft.com
                    )

给定 d 我想得到 e - 由于 b 是一个数组,有没有什么方法可以做到这一点而不需要循环遍历整个数组?

<stk status="ok">
<a>
  <b>
    <c>Yahoo</c>
    <d>YHOO</d>
    <e>http://www.yahoo.com</e>
  </b>

  <b>
    <c>Google</c>
    <d>GOOG</d>
    <e>http://www.google.com</e>
  </b>

  <b>
    <c>Microsoft</c>
    <d>MSFT</d>
    <e>http://www.microsoft.com</e>
  </b>
</a>
</stk>

I have the following SimpleXML object:

SimpleXMLElement Object
(
[@attributes] => Array
    (
        [status] => ok
    )

[a] => SimpleXMLElement Object
    (
        [b] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [c] => Google
                        [d] => GOOG
                        [e] => http://www.google.com
                    )

                [1] => SimpleXMLElement Object
                    (
                        [c] => Yahoo
                        [d] => YHOO
                        [e] => http://www.yahoo.com
                    )

                [2] => SimpleXMLElement Object
                    (
                        [c] => Microsoft
                        [d] => MSFT
                        [e] => http://www.microsoft.com
                    )

Given d I want to get e - Since b is an array, is there any way to do this without looping through the entire array?

<stk status="ok">
<a>
  <b>
    <c>Yahoo</c>
    <d>YHOO</d>
    <e>http://www.yahoo.com</e>
  </b>

  <b>
    <c>Google</c>
    <d>GOOG</d>
    <e>http://www.google.com</e>
  </b>

  <b>
    <c>Microsoft</c>
    <d>MSFT</d>
    <e>http://www.microsoft.com</e>
  </b>
</a>
</stk>

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

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

发布评论

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

评论(2

拒绝两难 2024-12-14 04:37:45

您可以使用 XPath 查询来询问 e 元素,这些元素是 b 元素的子元素,而 d 元素的文本为 YHOO.

请记住,SimpleXMLElement::xpath() 将返回一个元素数组,即使 XPath 只找到一个:因此 $urls[0] 获取第一个(唯一)一。

$xml  = '<stk status="ok"><a><b><c>Yahoo</c><d>YHOO</d><e>http://www.yahoo.com</e></b><b><c>Google</c><d>GOOG</d><e>http://www.google.com</e></b><b><c>Microsoft</c><d>MSFT</d><e>http://www.microsoft.com</e></b></a></stk>';
$stk  = simplexml_load_string($xml);
$urls = $stk->xpath('/stk/a/b[d="YHOO"]/e');
$yhoo = (string) $urls[0];
echo $yhoo;

You could use an XPath query asking for the e elements that are children of b elements having d elements with the text YHOO.

Remember that SimpleXMLElement::xpath() will return an array of elements, even if the XPath only finds one: hence $urls[0] to get the first (only) one.

$xml  = '<stk status="ok"><a><b><c>Yahoo</c><d>YHOO</d><e>http://www.yahoo.com</e></b><b><c>Google</c><d>GOOG</d><e>http://www.google.com</e></b><b><c>Microsoft</c><d>MSFT</d><e>http://www.microsoft.com</e></b></a></stk>';
$stk  = simplexml_load_string($xml);
$urls = $stk->xpath('/stk/a/b[d="YHOO"]/e');
$yhoo = (string) $urls[0];
echo $yhoo;
自由如风 2024-12-14 04:37:45

迭代所有 //d

对于每一个,评估 follow-sibling::e[1]

我想这就是 Marc B 的意思。

Iterate over all //d.

For each one, evaluate following-sibling::e[1].

I think that's what Marc B meant.

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