从Laravel模板生成xml文件

Ana*_*ent 2 php xml mysql laravel laravel-4

我有一个Laravel模板,我想根据它生成一个XML文件.

例如,结构具有名称,XPath和类型.所以XML应该如下所示:

<name>
</name>
<type>
</type>
<xpath>
</xpath>
Run Code Online (Sandbox Code Playgroud)

当然,我正在寻找能够处理关系的更复杂的东西.

那有什么工具吗?

我正在使用MySQL,所以也许有一个工具呢?或者也许是PHP脚本?

我已经尝试过搜索,我发现的所有工具都是从XSD生成HTML表单和从XSD生成通用XML的工具.

更新

表格及其列是:

  1. xml_document 带列的表: id
  2. general_information表列:id,xml_document_id,domain,start_url和'类别
  3. master_information表列:id,xml_document_id,container,和next_page
  4. master_attribute表列:id,master_information_id,name,xpath,和type
  5. details_attribute表列:id,xml_document_id,和type

您可能会注意到,之间的关系:

  1. xml_document和master_information是一对一的.
  2. xml_document和general_information是一对一的.
  3. xml_document和details_attribute是一对多的.
  4. master_information和master_attribute是一对多的

mst*_*rdy 7

根据Laravel文档,集合及其关系可以输出到数组:

$roles = User::find(1)->roles->toArray();
Run Code Online (Sandbox Code Playgroud)

例如,我有两个型号,User以及Phone和用户hasMany()的手机.

    users                  phones
    +----+--------+        +----+-----------+---------+
    | id | name   |        | id | number    | user_id |
    +----+--------+        +----+-----------+---------+
    |  1 | user 1 |        |  1 | 111111111 |       1 |
    |  2 | user 2 |        |  2 | 222222222 |       2 |
    +----+--------+        |  3 | 333333333 |       1 |
                           +----+-----------+---------+
Run Code Online (Sandbox Code Playgroud)

我们可以使用该toArray()方法返回一个数组,并with()提取所有相关的Phones:

$users = User::with('phones')->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

给出这个(hidden为了这个答案的目的,我在模型上有一些字段):

  Array (
    [0] => Array (
            [id] => 1
            [name] => user 1
            [phones] => Array (
                    [0] => Array (
                            [id] => 1
                            [number] => 111111111
                            [user_id] => 1
                        )

                    [1] => Array (
                            [id] => 3
                            [number] => 333333333
                            [user_id] => 1
                        )
                )    
        )    
    [1] => Array (
            [id] => 2
            [name] => user 2
            [phones] => Array (
                    [0] => Array (
                            [id] => 2
                            [number] => 222222222
                            [user_id] => 2
                        )    
                )    
        )    
)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用各种方法将数组转换为XML.这是我从SO上的另一个答案中解脱出来的

function array_to_xml(array $arr, SimpleXMLElement $xml)
{
    foreach ($arr as $k => $v) {
        is_array($v)
            ? array_to_xml($v, $xml->addChild($k))
            : $xml->addChild($k, $v);
    }
    return $xml;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

<?xml version="1.0"?>
<root><0><id>1</id><name>user 1</name><phones><0><id>1</id><number>111111111</number><user_id>1</user_id></0><1><id>3</id><number>333333333</number><user_id>1</user_id></1></phones></0><1><id>2</id><name>user 2</name><phones><0><id>2</id><number>222222222</number><user_id>2</user_id></0></phones></1></root>
Run Code Online (Sandbox Code Playgroud)