'); // 今日のトピックを改行でスプリット $dayTopicArr = explode("\n", $dayTopicText); // 説明ノードを作成 $i = createDescriptionNode($dayTopicArr, $monthday, $rootNode); // 出来事ノードを作成 $i = createEventsNode($dayTopicArr, $i, $rootNode); // 誕生日項目を作成 $i = createItem($dayTopicArr, $i, $rootNode->addChild('birthday'), '忌日'); // 忌日項目を作成 $i = createItem($dayTopicArr, $i, $rootNode->addChild('anniversary'), '記念日・年中行事'); $dom = new DOMDocument('1.0'); $dom->loadXML($rootNode->asXML()); $dom->formatOutput = true; echo $dom->saveXML(); } // 説明ノードを作成します function createDescriptionNode($dayTopicArr, $monthday, $rootNode) { // 配列の数を取得 $arrCount = count($dayTopicArr); for($i = 0; $i < $arrCount; $i++) { // 月日の説明ではない場合 if(!preg_match(sprintf("/\'%s\'/", $monthday), $dayTopicArr[$i])) { continue; } // ルートノードに説明ノードを追加 $descriptionNode = $rootNode->addChild('description'); // 説明ノードに項目を追加 $descriptionNode->addChild('item', removeExtraItems($dayTopicArr[$i])); break; } return $i; } // 出来事ノードを作成します function createEventsNode($dayTopicArr, $startIndex, $rootNode) { // 配列の数を取得 $arrCount = count($dayTopicArr); for($i = $startIndex; $i < $arrCount; $i++) { // できごとではない場合 if(!preg_match('/\=\= できごと \=\=/', $dayTopicArr[$i])) { continue; } break; } return createItem($dayTopicArr, $i, $rootNode->addChild('events'), '誕生日'); } // 項目を作成します function createItem($dayTopicArr, $startIndex, $node, $exitTitle) { // 配列の数を取得 $arrCount = count($dayTopicArr); for($i = $startIndex; $i < $arrCount; $i++) { // 終了条件のタイトルの場合 if(preg_match(sprintf('/\=\= %s \=\=/', $exitTitle), $dayTopicArr[$i])) { break; } // 有効な行ではない場合 if(!preg_match('/^\*.+/', $dayTopicArr[$i])) { continue; } $node->addChild('item', removeExtraItems($dayTopicArr[$i])); } return $i; } // 余計な項目を削除します function removeExtraItems($item) { // 出典を削除 $result = preg_replace('/\{\{.+?\}\}/', '', $item); // マルチワードを削除 $result = preg_replace_callback('/\[\[(.+?)\]\]/', removeMultiWord, $result); // < ~ >を削除 $result = preg_replace('/\<\;.+?\>\;/', '', $result); // 「en:」を削除 $result = preg_replace('/en\:/', '', $result); // 先頭の「* 」を削除 $result = preg_replace('/^\* ?/', '', $result); // 記号を削除 $result = preg_replace('/[\'\[\]]/', '', $result); return $result; } // マルチワードを削除します function removeMultiWord($m) { return preg_replace('/.+\|/', '', $m[1]); } ?>