Как получить доступ к нескольким похожим тегам в XML с помощью PHP - PullRequest
2 голосов
/ 20 октября 2011

У меня есть 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>

Я хочу получить доступ только к тегу "id" для обоих тегов "status" в php. Я не хочу никаких других тегов.Например, Id = 133809164 Id = 123456789

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Вы можете использовать XPath для получения этой информации.Путь к местоположению для передачи в качестве параметра связанному методу:

/statuses/status//id
2 голосов
/ 20 октября 2011

Рассмотрите возможность использования SimpleXML примерно так:

<?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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...