私はいくつかの機能を思いつきましたが、それらが最良のアプローチであることに自信がありません。これは、私がヘッダーと呼ぶものを確立するために作成したものです。これは、.csv ファイルで同じことを行い、$headers 配列を使用してデータベース テーブルを作成し、ヘッダーが列名であるためです。.xml ファイルでも同じことをしたい...
function ecsvi_XML_establish_headers($xmlpath){
if( ! $xml3 = simplexml_load_file( $xmlpath ) ) {
return false;
} else {
$headers = array();
foreach( $xml3->book[0]->attributes() as $a => $b ) {
$headers[] = $a;
}
foreach( $xml3 as $header => $book ) {
foreach($book as $node => $value){
$headers[] = $node;
}
break;
}
return $headers;
}
本を含む .xml ファイルでテストしているため、ご覧のとおり、関数には「本」という単語が含まれています。そこにある任意の .xml ファイルで動作する必要があるため、これは適切ではありません。
一般化するために「アイテム」と呼んでいるものをカウントする関数は、現在、明らかな理由でゼロを返します(.xmlファイルを使用していると考える場合)...
function ecsvi_XML_count_number_of_items($xmlpath){
$table = new SimpleXMLElement(file_get_contents($xmlpath));
return count($table->Row);
}
これは「Row」を使用し、.xml ファイルに「Row」という要素がないため、適切ではありません。
だから、同じコード行を実行するために eval() のような関数を使用する必要があるのか 、それとももっと SimpleXML アプローチや検討すべき他の PHP 関数があるのか 疑問に思っています。
.xml ファイルのコンテンツを出力し、ユーザーが属性やノードなどを選択して、アプリケーションに何をすべきかを伝えるインターフェイスを見てきました。できれば避けたいところです。目標は、そのファイルに基づいて作成されたデータベース テーブルに任意の .xml をインポートすることです。スクリプトは、コンテンツ、要素、ノード、子などを認識しません。
これが私の本の .xml ファイルです...
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
$headers は次の配列を出力します...
*id
*author
*title
*genre
*price
*publish_date
*description
この .xml ファイル専用のデータベース テーブルを作成するには、このヘッダーのリストが必要です。インポートされた各 .xml ファイルはまったく異なるため、どの関数もそのリスト、「カタログ」、または「ブック」内のアイテムを使用できません。多分私は確かにそれを明確にしました。
最適なアプローチと、適切なアプローチを決定するのに役立つ既存のソースに関するアドバイスをありがとう。