データモデリングツールwwwsqldesignerからエクスポートされたxmlファイルがあります。これには、すべての表、そのコメント、列とそのデータ型、主キー列などが含まれます。PHP:Foreach Simlplexml出力
私はxmlファイルをPHPのスクリプトで正常にsimplexml_load_fileでインポートしましたが、今度は3つのリストを取得するためにノード/タグをループしたいと思います(3つのテーブルのデータベースに挿入してください) 。
これらのリストは次のとおりです。 1)テーブル:datamodel/xml-fileのテーブル名、そのコメントと主キーの名前。 2)列:その表の列:列名、データ型、NULL可能(可能な場合は列の順序)。 3)主キー列:列名と列の順序。
XMLは次のようになります。各データベース・テーブルについて
<?xml version="1.0" encoding="utf-8" ?>
<sql>
<table x="673" y="237" name="DIM_CUSTOMER">
<row name="CUSTOMER_SID" null="0" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default><comment>Customer-SK</comment>
</row>
<row name="CUSTOMER_NAME" null="0" autoincrement="0">
<datatype>VARCHAR(30)</datatype>
<default>'NULL'</default><comment>Customername</comment>
</row>
<row name="CUSTOMER_GROUP" null="1" autoincrement="0">
<datatype>VARCHAR(30)</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="DIM_CUSTOMER_PK">
<part>CUSTOMER_SID</part>
</key>
<comment>Kunden</comment>
</table>
<table x="1150" y="204" name="DIM_PRODUCT">
<row name="PRODUCT_SID" null="0" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default><comment>Produkt-Sk</comment>
</row>
<row name="PRODUCT_NAME" null="0" autoincrement="0">
<datatype>VARCHAR(30)</datatype>
<default>'NULL'</default><comment>Productname</comment>
</row>
<key type="PRIMARY" name="DIM_PRODUCT_PK">
<part>PRODUCT_SID</part>
</key>
<comment>Product</comment>
</table>
<table x="632" y="499" name="DIM_DATE">
<row name="DATE_ID" null="0" autoincrement="1">
<datatype>DATE</datatype>
<default>'NULL'</default></row>
<row name="YEAR" null="1" autoincrement="0">
<datatype>CHAR(4)</datatype>
<default>NULL</default></row>
<row name="QUARTER" null="1" autoincrement="0">
<datatype>CHAR(2)</datatype>
<default>NULL</default></row>
<row name="MONTH" null="1" autoincrement="0">
<datatype>VARCHAR(2)</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="DIM_DATE_PK">
<part>DATE_ID</part>
</key>
</table>
<table x="1214" y="511" name="DIM_INVENTORY">
<row name="INVENTORY_SID" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default><comment>Inventory SK</comment>
</row>
<row name="INVENTORY_NAME" null="0" autoincrement="0">
<datatype>VARCHAR(30)</datatype>
<default>'NULL'</default><comment>Inventory</comment>
</row>
<key type="PRIMARY" name="DIM_DATE_PK">
<part>INVENTORY_SID</part>
</key>
</table>
<table x="950" y="358" name="FACT_SALES">
<row name="DATE_ID" null="0" autoincrement="0">
<datatype>DATE</datatype>
<default>'NULL'</default><relation table="DIM_DATE" row="DATE_ID" />
</row>
<row name="INVENTORY_SID" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="DIM_INVENTORY" row="INVENTORY_SID" />
<comment>Inventory SK</comment>
</row>
<row name="PRODUCT_SID" null="0" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="DIM_PRODUCT" row="PRODUCT_SID" />
<comment>Product-Sk</comment>
</row>
<row name="CUSTOMER_SID" null="0" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="DIM_CUSTOMER" row="CUSTOMER_SID" />
<comment>Customer-SK</comment>
</row>
<row name="REVENUE" null="0" autoincrement="0">
<datatype>DECIMAL(10,2)</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="FACT_SALES_PK">
<part>DATE_ID</part>
<part>INVENTORY_SID</part>
<part>PRODUCT_SID</part>
<part>CUSTOMER_SID</part>
</key>
<comment>Sales</comment>
</table>
</sql>
複数のタグと、主キーとタグ用のタグを含むタグが存在しています。タグ自体には、すべての主キー列に対して複数のタグがあります。 I上記の3つのに必要なリストを作成する
は、PHPスクリプトを書きましたfollwing:
<?php
$xml = simplexml_load_file('C:\xampp\htdocs\sqldesigner\backend\php-mysql\Datamart.xml');
// Tables
echo "+++++++++++++ TABLES +++++++++++++<br>";
foreach ($xml->table as $table) {
echo "----------------------------------------<br>";
echo "Tabelle: " . $table['name'] . "<br>"; //Tabelle
echo "Primary: " . $table->key['name'] . "<br>"; //PK
echo "Comment: " . $table->comment . "<br>"; //Table-Comment
}
// Columns
echo "+++++++++++++ COLUMNS +++++++++++++<br>";
foreach ($xml->table as $table) {
foreach ($table as $row) {
echo "Column: " . $table['name'] . "." . $row['name'] . "<br>";
echo "Nullable: " . $row["null"] . "<br>";
echo "Datatype: " . $row->datatype."<br>";
echo "Comment: " . $row->comment . "<br>";
echo "---------------------<br>";
}
}
// PK-Columns
echo "+++++++++++++ PRIMARY KEY COLS +++++++++++++<br>";
foreach ($xml->table as $table) {
foreach ($table as $primarykey) {
echo "PK-Col.: " . $table['name'] . "." . $primarykey->part . "<br>";
}
}
?>
残念ながら、出力は列と主キーのために間違っています。空行が生成されます。だから、私の推測は、内側foreachから外側foreachへの接続があることです。出力は次のようになります。
+++++++++++++ TABLES +++++++++++++
----------------------------------------
Tabelle: DIM_CUSTOMER
Primary: DIM_CUSTOMER_PK
Comment: Kunden
----------------------------------------
Tabelle: DIM_PRODUCT
Primary: DIM_PRODUCT_PK
Comment: Product
----------------------------------------
Tabelle: DIM_DATE
Primary: DIM_DATE_PK
Comment:
----------------------------------------
Tabelle: DIM_INVENTORY
Primary: DIM_DATE_PK
Comment:
----------------------------------------
Tabelle: FACT_SALES
Primary: FACT_SALES_PK
Comment: Sales
+++++++++++++ COLUMNS +++++++++++++
Column: DIM_CUSTOMER.CUSTOMER_SID
Nullable: 0
Datatype: INTEGER
Comment: Customer-SK
---------------------
Column: DIM_CUSTOMER.CUSTOMER_NAME
Nullable: 0
Datatype: VARCHAR(30)
Comment: Customername
---------------------
Column: DIM_CUSTOMER.CUSTOMER_GROUP
Nullable: 1
Datatype: VARCHAR(30)
Comment:
---------------------
Column: DIM_CUSTOMER.DIM_CUSTOMER_PK
Nullable:
Datatype:
Comment:
---------------------
Column: DIM_CUSTOMER.
Nullable:
Datatype:
Comment:
---------------------
Column: DIM_PRODUCT.PRODUCT_SID
Nullable: 0
Datatype: INTEGER
Comment: Produkt-Sk
---------------------
Column: DIM_PRODUCT.PRODUCT_NAME
Nullable: 0
Datatype: VARCHAR(30)
Comment: Productname
---------------------
Column: DIM_PRODUCT.DIM_PRODUCT_PK
Nullable:
Datatype:
Comment:
---------------------
Column: DIM_PRODUCT.
Nullable:
Datatype:
Comment:
---------------------
Column: DIM_DATE.DATE_ID
Nullable: 0
Datatype: DATE
Comment:
---------------------
Column: DIM_DATE.YEAR
Nullable: 1
Datatype: CHAR(4)
Comment:
---------------------
Column: DIM_DATE.QUARTER
Nullable: 1
Datatype: CHAR(2)
Comment:
---------------------
Column: DIM_DATE.MONTH
Nullable: 1
Datatype: VARCHAR(2)
Comment:
---------------------
Column: DIM_DATE.DIM_DATE_PK
Nullable:
Datatype:
Comment:
---------------------
Column: DIM_INVENTORY.INVENTORY_SID
Nullable: 1
Datatype: INTEGER
Comment: Inventory SK
---------------------
Column: DIM_INVENTORY.INVENTORY_NAME
Nullable: 0
Datatype: VARCHAR(30)
Comment: Inventory
---------------------
Column: DIM_INVENTORY.DIM_DATE_PK
Nullable:
Datatype:
Comment:
---------------------
Column: FACT_SALES.DATE_ID
Nullable: 0
Datatype: DATE
Comment:
---------------------
Column: FACT_SALES.INVENTORY_SID
Nullable: 1
Datatype: INTEGER
Comment: Inventory SK
---------------------
Column: FACT_SALES.PRODUCT_SID
Nullable: 0
Datatype: INTEGER
Comment: Product-Sk
---------------------
Column: FACT_SALES.CUSTOMER_SID
Nullable: 0
Datatype: INTEGER
Comment: Customer-SK
---------------------
Column: FACT_SALES.REVENUE
Nullable: 0
Datatype: DECIMAL(10,2)
Comment:
---------------------
Column: FACT_SALES.FACT_SALES_PK
Nullable:
Datatype:
Comment:
---------------------
Column: FACT_SALES.
Nullable:
Datatype:
Comment:
---------------------
+++++++++++++ PRIMARY KEY COLS +++++++++++++
PK-Col.: DIM_CUSTOMER.
PK-Col.: DIM_CUSTOMER.
PK-Col.: DIM_CUSTOMER.
PK-Col.: DIM_CUSTOMER.CUSTOMER_SID
PK-Col.: DIM_CUSTOMER.
PK-Col.: DIM_PRODUCT.
PK-Col.: DIM_PRODUCT.
PK-Col.: DIM_PRODUCT.PRODUCT_SID
PK-Col.: DIM_PRODUCT.
PK-Col.: DIM_DATE.
PK-Col.: DIM_DATE.
PK-Col.: DIM_DATE.
PK-Col.: DIM_DATE.
PK-Col.: DIM_DATE.DATE_ID
PK-Col.: DIM_INVENTORY.
PK-Col.: DIM_INVENTORY.
PK-Col.: DIM_INVENTORY.INVENTORY_SID
PK-Col.: FACT_SALES.
PK-Col.: FACT_SALES.
PK-Col.: FACT_SALES.
PK-Col.: FACT_SALES.
PK-Col.: FACT_SALES.
PK-Col.: FACT_SALES.DATE_ID
PK-Col.: FACT_SALES.
Here is how the datamodel from the xml looks like in the wwwsqldesigner
任意の提案は、どのようにこの問題を処理するために?
ありがとうございます!
ありがとう、それは私の問題を解決しました。 – guhl