我从哪里开始...XML 文件需要进入数据库。因此,我想创建一个配置数组,其中包含一个表的 XML 节点和表列之间的映射。
$maps = array(
// 'node-name'=>'column-name'
'prod_id'=>'supplier_product_id',
'description'=>'product_description',
);
$xml=simplexml_load_file($file);
//just a test
foreach ($maps as $node => $col){
echo 'node ' . $xml->$node . ' is mapped to: ' . $col; //this works
}
我需要从子节点将信息放入此(相同)表中。所以我正在考虑将子节点放在这样的嵌套数组中:
$maps = array(
// 'node-name'=>'column-name'
'prod_id'=>'supplier_product_id',
'description'=>'product_description',
// to access $xml->node->subnode;
'category'=>array(
'id'=>'category_id',
),
);
但是现在我很困惑,如何使用嵌套数组来制作通往节点的路径,如下所示: $xml->category->id
我是PHP的新手,希望一些帮助能让我再次上路。欢迎所有帮助,提前感谢您。
试试这个:
<?php
$maps = array(
// 'node-name'=>'column-name'
'prod_id'=>'supplier_product_id',
'description'=>'product_description',
// to access $xml->node->subnode;
'category'=>array(
'id'=>'category_id'
)
);
function getDataMapping( $maps, $child="" ) {
global $file;
$xml=simplexml_load_file($file);
foreach ($maps as $node => $col) {
if( is_array( $col ) ) {
getDataMapping( $col, $node );
} else {
if( $child ) {
echo 'node ' . $xml->{$child}->$node . ' is mapped to: ' . $col; //this works
} else {
echo 'node ' . $xml->$node . ' is mapped to: ' . $col; //this works
}
}
}
}
getDataMapping( $maps );
?>
显然,如果你的嵌套深度很多(数组中的数组等),你可以将其更改为递归函数。
希望这有帮助。
下面是 XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<message>
<errorcode>100</errorcode>
<body>
<jobs>
<job>
<id>1</id>
<description>Nice job at the office</description>
<hours>40</hours>
<contact>
<id>SYL</id>
<name>Sylvia</name>
<email>sylvia@mail.com</email>
</contact>
</job>
<job>
<id>2</id>
<description>Construction work</description>
<hours>32</hours>
<contact>
<id>HEN</id>
<name>Hendrik</name>
<email>hendrik@mail.com</email>
</contact>
</job>
</jobs>
</body>
<attachements>
</attachements>
<filenames>
</filenames>
</message>
我只是意识到实际上没有必要阅读超过 2 个级别。所以你的答案就足够了,因为它可以访问$xml->节点和$xml->子节点>节点。使用 xpath('//job'),我可以为所有节点设置一个基本节点入口并迭代它们。