1

私は今数日間問題があります:s ...文字列内の変化するデータを取得しようとしています。文字列は次のようなものです:

<docdata>
 <!-- News Identifier -->
        <doc-id id-string ="YBY15349" />

        <!-- Date of issue -->
        <date.issue norm ="2012-09-22 19:52" />
        <!-- Date of release -->
        <date.release norm ="2012-09-22 19:52" />
      </docdata>

私が必要とするのは、 "2012-09-22 19:52"内の日付のみです。これは 、何らかのタイプの xml に格納されている文字列であり、途中で不正な形式になっています。したがって、通常の xml パーサーを使用することはできません。既にファイルを読み込んで文字セットを変更しています

    $fname = $file;
    $fhandle = fopen($fname,"r");
    $content = fread($fhandle,filesize($fname));
    str_replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>", $content); 
etc..

これは魅力のように機能しますが、文字列では使用できません。preg_match_all を試してみましたが、うまくいきません。この値を検索する簡単な方法があります

<date.issue norm ="2012-09-22 19:52" />

変数の日付だけを取得しますか?

前もって感謝し、私の英語で申し訳ありません。

4

3 に答える 3

1

以下に一致する正規表現:

<date.issue norm ="2012-09-22 19:52" />

だろう:

/<date\.issue\s*norm\s*="([^"]*)"/

コード内:

preg_match_all('/<date\.issue\s*norm\s*="([^"]*)"/', $content, $matches);
// $matches[1] contains all the dates
于 2012-09-26T02:17:38.313 に答える
1

PHPドキュメントから:

file_get_contents() は、ファイルの内容を文字列に読み込むための推奨される方法です。OS でサポートされている場合は、メモリ マッピング手法を使用してパフォーマンスを向上させます。

したがって、コードは次のようになります。

$content = file_get_contents($file);
$content = str_replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>", $content);
preg_match_all('/date\.issue norm ="([^"]+)" /', $content, $date);

デフォルトの動作では、括弧で囲まれた一致が配列に格納され$date[1]ます。したがって、 、 などをループする可能性があり$date[1][0]ます$date[1][1]

于 2012-09-26T02:37:52.603 に答える
0

使用する代わりに

fopen($filename)

使用する

$filename = '/path/to/file.xml';
$filearray = file($filename) // pulls the while file into an array by lines

$searchstr = 'date.issue';

foreach($filearray as $line) {
   if(stristr($line,$searchstr)) { // <-- forgot the )
      $linearray = explode('"',$line);
      // your date should be $linearray[1];
      echo $linearray[1]."\n";  // to test your output
      // rest of your code here
   }
}

このようにして、ファイル全体で検索文字列を検索すると、不正な形式の xml が問題になることはありません。

于 2012-09-26T02:19:18.130 に答える