0

マルチレベル XML タグ間のテキストを抽出しようとしています。 これは、 で囲まれたタグ 間の 10 個の ID を抽出したい
データ ファイルです。正規表現は、10 個のうち最初の値だけを取得します。 xml データは $temp_Str 変数に格納されており、$pids に格納されている値を取得しようとしています。これに関する他の提案はありますか?
<eSearchResult> <Count>7117</Count> <RetMax>10</RetMax> <RetStart>0</RetStart> <QueryKey>1</QueryKey> <WebEnv> NCID_1_457044331_130.14.22.215_9001_1401819380_1399850995 </WebEnv> <IdList> <Id>24887359</Id> <Id>24884828</Id> <Id>24884718</Id> <Id>24884479</Id> <Id>24882343</Id> <Id>24879340</Id> <Id>24871662</Id> <Id>24870721</Id> <Id>24864115</Id> <Id>24863809</Id> </IdList> <TranslationSet/> <TranslationStack> <TermSet> <Term>BRCA1[tiab]</Term> . . . </TranslationStack> </eSearchResult>
<ID></ID><IdList></IdList>preg_match_all('~<Id>(.+?)<\/Id>~', $temp_str, $pids)

4

4 に答える 4

0

このパターン(?:\<IdList\>|\G)\s*\<Id\>(\d+)\<\/Id\>gオプション
Demoで使用します

于 2014-06-03T18:49:21.880 に答える
0

XML の解析に PCRE を使用しないでください。以下は、CSS セレクターと、XML DOM の一部を取得するためのさらに優れた Xpath です。

Id最初IdListの要素に要素が必要な場合eSearchResult

/eSearchResult/IdList[1]/Id

ご覧のとおり、Xpath は XML ドキュメントの実際の構造を「認識」しています。PCRE はそうではありません。

DOM ドキュメントの Xpath オブジェクトを作成する必要があります

$dom = new DOMDocument();
$dom->loadXml($xmlString);
$xpath = new DOMXpath($dom);

$result = [];
foreach ($xpath->evaluate('/eSearchResult/IdList[1]/Id') as $id) [
  $result[] = trim($id->nodeValue);
}
var_dump($id);
于 2014-06-03T21:38:39.567 に答える