ここで実際に 2 つの質問をしています。1 つは HTML を解析する方法です ( PHP で HTML/XML を解析および処理するにはどうすればよいですか?で概説されています。これについては広範囲に回答されているため、その部分はスキップします)。もう 1 つは、文字列を解析する方法です。
文字列の解析は、文字列の形式に完全に依存します。これは通常、PHP の文字列関数とPHP の正規表現関数で行われます。これらの詳細については、PHP のマニュアルを参照してください。
既に概説したように使用される関数の次に、文字列のフォーマット仕様も必要です。これまでのところ、質問には文字列の例しか含まれていませんが、どの部分が何であり、決定基準が何であるかの仕様が欠落しています。
最初に指定する必要があります。コードの最初の行を記述する前に指定します。最終的には、好きなプログラミング言語で書くことができます。したがって、PHP か Java かはそれほど重要ではなく、それがどのように機能するかを適切に指定していることがはるかに重要です。次に、その処理をコードにエンコードします。
PHP でどのように実行できるかを示すための大まかなコード例 (抜粋) :
$url = 'http://lebanonema.org/pager/html/monitor.html';
$buffer = file_get_contents($url);
$buffer = utf8_encode($buffer);
$config = [
'doctype' => 'omit',
'output-xml' => 1,
];
$buffer = tidy_repair_string($buffer, $config, 'utf8');
$xml = simplexml_load_string($buffer);
$nodes = new DecoratingIterator(
new SimpleXMLXPathIterator($xml, '//tr[count(td) > 1]'),
'NodeParser'
);
foreach ($nodes as $index => $node) {
echo $index, ': ', json_encode($node, JSON_PRETTY_PRINT), "\n";
}
出力例:
0: {
"date": "23-07-13",
"time": "07:56:28",
"pageid": "POCSAG-1",
"text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
"station": "Station 31"
}
1: {
"date": "23-07-13",
"time": "07:56:26",
"pageid": "POCSAG-1",
"text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
"station": "Station 30"
}
2: {
"date": "23-07-13",
"time": "07:56:25",
"pageid": "POCSAG-1",
"text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
"station": "Sta 31 Siren"
}
...
497: {
"date": "22-07-13",
"time": "12:21:27",
"pageid": "POCSAG-1",
"text": "South Lebanon Township 1700 S LINCOLN AVE VA\nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36\nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
"station": "Station 26"
}
498: {
"date": "22-07-13",
"time": "12:21:20",
"pageid": "POCSAG-1",
"text": "South Lebanon Township 1700 S LINCOLN AVE VA\nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36\nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
"station": "Station 25"
}
499: {
"date": "22-07-13",
"time": "12:18:19",
"pageid": "POCSAG-1",
"text": "Company 34 Correction..No Training TOMORROW\nnight..Training Will Be Held Thursday At 1830",
"station": "Station 34"
}
この例は、解析だけでなく、たとえば無効な HTML のクリーンアップ ( PHP では Tidy を使用できます) や、文字セット エンコーディングの処理も必要であることを示しています。
NodeParser
オブジェクトは、操作<TR>
によって返された具体的な要素をオーバーロードしているだけです。これは、基本的な SimpleXML 解析であり、前述のとおりです。おまけとして、このオブジェクトはインターフェースを実装しているため、簡単に変換/表示できます。xpath()
JsonSerializable
パーサー オブジェクトを使用すると、時間の経過とともに解析を変更および微調整できます。たとえば、このコード例が示すように、これまでのテキストはさらに解析されていません (仕様が欠落しているため)。
これが役に立ち、少なくともそれを行う方法を示してくれることを願っています。