可能重复:
Attribute Value Selection in SimpleXML
SimpleXML: Selecting Elements Which Have A Certain Attribute Value
我正在解析XML文档并查找特定ID。 ID值在属性“pii”下的ArticleId元素中提供。原始XML:
<ArticleIdList>
<ArticleId IdType="pubmed">12676398</ArticleId>
<ArticleId IdType="pii">S0020729202004460</ArticleId>
</ArticleIdList>
使用simplexml_load_file(),我正在遍历文档以获取值。这是我如何进入ArticleId元素:
$xml_PubmedArticle->PubmedData->ArticleIdList->ArticleId;
问题是ArticleId中的属性是按顺序随机的。一些ArticleId元素在第二个元素中包含“pii”值(如下所示),其他记录在第二个元素中具有不同的属性(“doi”)。
SimpleXMLElement Object
(
[ArticleId] => Array
(
[0] => 12676398
[1] => S0020729202004460
)
)
变异:
SimpleXMLElement Object
(
[ArticleId] => Array
(
[0] => 1234
[1] => ABC123
[2] => S002012345678
)
)
我正在寻找“S0002 ...”ID,它在原始XML中通过属性“pii”标识。
我应该如何根据特定属性检查/获取值?
答案 0 :(得分:3)
有几种方式:
foreach ($xml_PubmedArticle->PubmedData->ArticleIdList->ArticleId as $id) {
foreach ($id->attributes() as $name => $value) {
if ($value == 'pii') {
//FOUND!
}
}
}
..或简单的xpath
$xml_PubmedArticle->xpath('PubmedData/ArticleIdList/ArticleId[@IdType="pii"]');
更具体的xpath更快。
另请注意,第一个选项只会迭代 first ArticleIdList
,因为XPath将返回它找到的所有项目的数组。
答案 1 :(得分:1)
您可以使用xpath
echo $xml_PubmedArticle->xpath('//ArticleIdList/ArticleId[@IdType="pii"]')[0];
另请参阅手册中的Basic SimpleXML Usage。