如何使用PHP访问XML中的多个相似标记
我有一个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
<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