PHPで、正規表現のみでXMLタグと値を配列に格納するフリーの関数を教えてください。速度に信頼のあるパーサーを探しています。PHP:XMLパーサなどのライブラリおよび他言語はNG(既知)です。よろしくお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/04/04 23:19:12
  • 終了:--

回答(1件)

id:szkn No.1

szkn回答回数15ベストアンサー獲得回数02005/04/05 01:35:12

ポイント50pt

下記URLのタグの正規表現を流用して作りました(SGMLの省略タグ機構は無視できるので一部変更)


$array = preg_split(&#39/(<[^\x22\x27<>]*(?:\x22[^\x22]*\x22[^\x22\x27<>]*|\x27[^\x27]*\x27[^\x22\x27<>]*)*>)/',$xml,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);


要素内容に<,>を含まないwell-formedなXMLという前提です.

速度については,preg_match_all()で同様のコトをするよりもpreg_split()の方が速いのは確認済みです.


正規表現を使わず,while ($i < strlen($xml)) で逐次解析する方法も思い浮かびますが,「正規表現」をつかってとのことなのでこんなもんではないでしょうか.


不勉強ですが,XMLで属性値内に<,>を含めないのであれば,正規表現は<[^>]+>で十分です.一応書いておくと

$array = preg_split(&#39/(<[^>]+>)/',$xml,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

ですね

id:ukp

書いて頂いたコードを応用して実際に試してみました。PHPパーサ関数よりだいぶ早くなりました。ありがとうございました。

2005/04/06 19:26:31

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません