Php 如何使用多维数组形成XML子节点的路径
我从哪里开始。。。XML文件需要进入数据库。因此,我想创建一个配置数组,其中包含一个表的XML节点和表列之间的映射Php 如何使用多维数组形成XML子节点的路径,php,xml,multidimensional-array,Php,Xml,Multidimensional Array,我从哪里开始。。。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 ($m
$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>
我只是意识到实际上没有必要阅读超过两个级别的内容。所以您的答案就足够了,因为它可以访问$xml->node和$xml->child->node。使用xpath“//job”,我可以为所有节点设置一个基本节点入口,并对它们进行迭代。谢谢@Pushpesh!递归函数是我感兴趣的,但我还不知道怎么做。。。我的问题是如何用正确的语法构建一个句子来访问子节点的值。在子节点上的所有节点名称都可以存储在一个数组中。但是如何用“箭头”->“将其写回以再次形成正确的语法呢?像这样:$xml->{$node}->{subnode}->{subsubnode}->{subsubsubnode}你看到我的整个问题了吗,因为我太早按Enter键了,你已经回答了?我认为语法还不正确。如果有sub-sub-child,字符串也必须拉伸这个数量的子child,得到:$xml->{child}->{subchild}->{subsubchild}或者我需要另一种方法吗?好的,我上面给你的是一个有效的模板。如果您愿意向我展示您正在使用的XML文件,它将在很大程度上帮助我为您提供永久解决方案。否则,这就像在黑暗中射击!!我只是意识到实际上没有必要阅读超过两个级别的内容。所以您的答案就足够了,因为它可以访问$xml->node和$xml->child->node。使用xpath“//job”,我可以为所有节点设置一个基本节点入口,并对它们进行迭代。