Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP访问XML中的多个相似标记_Php_Xml_Xpath - Fatal编程技术网

如何使用PHP访问XML中的多个相似标记

如何使用PHP访问XML中的多个相似标记,php,xml,xpath,Php,Xml,Xpath,我有一个XML,如下所示 <statuses type="array"> <status> <created_at>Thu Oct 20 09:49:46 +0000 2011</created_at> <text>@pkprasad82 Hello</text> <entities> <user_mentions> <user_ment

我有一个XML,如下所示

    <statuses type="array">
    <status>
    <created_at>Thu Oct 20 09:49:46 +0000 2011</created_at>
    <text>@pkprasad82  Hello</text>
    <entities>
    <user_mentions>
    <user_mention end="11" start="0">
    <id>133809164</id>
    <screen_name>pkpras</screen_name>
    <name>prav</name>
    </user_mention>
    </user_mentions>
    <urls/>
    <hashtags/>
    </entities>
    </status>
    <status>
    <created_at>Thu Oct 20 09:49:46 +0000 2011</created_at>
    <text>hello  Hello</text>
    <entities>
    <user_mentions>
    <user_mention end="11" start="0">
    <id>123456789</id>
    <screen_name>pkpras</screen_name>
    <name>pravin</name>
    </user_mention>
    </user_mentions>
    <urls/>
    <hashtags/>
    </entities>
    </status>
    <statuses>

2011年10月20日星期四09:49:46+0000
@pkprasad82你好
133809164
pkpras
婴儿车
2011年10月20日星期四09:49:46+0000
你好你好
123456789
pkpras
普拉文
我只想访问php中两个“status”标记的“id”标记。我不想要任何其他标记。 例如 Id=133809164 Id=123456789

您可以使用来检索此信息。作为参数传递给链接方法的位置路径为:

/statuses/status//id
考虑这样使用:


我不明白为什么需要一个双foreach,而您可以使用位置路径检索所需的内容。不管怎样,这也是一个解决方案。@AurelioDeRosa:你说得对-SimpleXML包总是使用DOM解析器,所以使用我在回答中描述的方法对性能没有好处。@Peter感谢你的无私和诚实。
<?php

// @Himanshu - Notice correction to final closing tag.

$xmlstr = '
<statuses type="array">
  <status>
    <created_at>Thu Oct 20 09:49:46 +0000 2011</created_at>
    <text>@pkprasad82  Hello</text>
    <entities>
      <user_mentions>
        <user_mention end="11" start="0">
          <id>133809164</id>
          <screen_name>pkpras</screen_name>
          <name>prav</name>
        </user_mention>
      </user_mentions>
      <urls/>
      <hashtags/>
    </entities>
  </status>
  <status>
    <created_at>Thu Oct 20 09:49:46 +0000 2011</created_at>
    <text>hello  Hello</text>
    <entities>
      <user_mentions>
        <user_mention end="11" start="0">
          <id>123456789</id>
          <screen_name>pkpras</screen_name>
          <name>pravin</name>
        </user_mention>
      </user_mentions>
      <urls/>
      <hashtags/>
    </entities>
  </status>
</statuses>';

$mydata = new SimpleXMLElement($xmlstr);

/* For each <user_mention> node, we echo a separate <id>. */
foreach ($mydata as $status) {
    foreach ($status->entities->user_mentions as $user_mention) {
        echo $user_mention->user_mention->id, PHP_EOL;
    }
}
?>
133809164
123456789