3

可能的重复:
SimpleXML 中的属性值选择
SimpleXML:选择具有特定属性值的元素

我正在解析一个 XML 文档并寻找一个特定的 ID。ID 值在属性“pii”下的 ArticleId 元素中提供。原始 XML:

<ArticleIdList>
    <ArticleId IdType="pubmed">12676398</ArticleId>
    <ArticleId IdType="pii">S0020729202004460</ArticleId>
</ArticleIdList>

这是整个文档供参考:http ://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=12676398&retmode=xml&rettype=abstract

使用 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”标识。

我应该如何检查/获取基于特定属性的值?

4

2 回答 2

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 更快。

另请注意,第一个选项将仅迭代第一个选项 ArticleIdList因为 XPath 将返回它找到的所有项目的数组。

于 2012-08-16T19:31:42.217 回答
1

您可以使用以下方法通过属性值访问特定元素xpath

echo $xml_PubmedArticle->xpath('//ArticleIdList/ArticleId[@IdType="pii"]')[0];

另请参阅手册中的Basic SimpleXML Usage

一个相关的问题是:simplexml,返回具有相同标签的多个项目

于 2012-08-16T19:23:02.770 回答