マルチレベル 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 に答える
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 に答える