3

重複の可能性: SimpleXML での
属性値の選択
SimpleXML: 特定の属性値を持つ要素の選択

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 要素は、2 番目の要素に「pii」値を含み (以下を参照)、他のレコードは 2 番目の要素に異なる属性 (「doi」) を持ちます。

SimpleXMLElement Object
(
    [ArticleId] => Array
        (
            [0] => 12676398
            [1] => S0020729202004460
        )
)

変化:

SimpleXMLElement Object
(
    [ArticleId] => Array
        (
            [0] => 1234
            [1] => ABC123
            [2] => S002012345678
        )
)

生の XML で属性「pii」によって識別される「S0002...」ID を探しています。

特定の属性に基づいて値を確認/取得するにはどうすればよいですか?

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 の方が高速です。

また、最初のオプションは、XPath が検出したすべてのアイテムの配列を返すため、最初 のオプションのみを反復することに注意してください。ArticleIdList

于 2012-08-16T19:31:42.217 に答える
1

次を使用して、属性の値によって特定の要素にアクセスできますxpath

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

マニュアルの基本的な SimpleXML の使用法も参照してください。

関連する質問: simplexml、同じタグを持つ複数のアイテムを返す

于 2012-08-16T19:23:02.770 に答える