我为xpath做错了什么不接受任何东西?这个函数在另一个xml文件上运行得很好,但是它的深度要小一些。
function xml2csv($xmlFile, $xPath) {
$xml = simplexml_load_file($xmlFile);
$path = $xml->xpath($xPath);
$csvData = '';
foreach($path as $item) {
foreach($item as $key => $value) {
$csvData .= '"' . trim($value) . '"' . ',';
}
$csvData = trim($csvData, ',');
$csvData .= "\n";
}
return $csvData;
}
正在使用的XML
<?xml version='1.0'?>
<bl>
<section>
<grade gradeLevel="1">
<level dirname="The folder of pdfs">
<file filename="hello_world.pdf">Hello world</file>
<file filename="the_avengers.pdf">The Avengers</file>
<file filename="batman.pdf">Batman</file>
</level>
</grade>
</section>
</bl>
当调用xml2csv('test.xml', 'bl');
时,没有返回任何内容,与bl/section/grade/*
之后的任何内容相同,也尝试了单一目标。
我希望至少输出文件名..
似乎工作得很好的XML 我可以使用上面xml2csv('cars.xml', 'car');
上面的相同方法定位下面的xml
<?xml version='1.0'?>
<cars>
<car>
<color>blue</color>
<price>2000</price>
</car>
<car>
<color>red</color>
<price>10000</price>
</car>
<car>
<color>black</color>
<price>5000</price>
</car>
</cars>
汽车XML输出
"blue","2000"
"red","10000"
"black","5000"
答案 0 :(得分:0)
必须修改原始xml2csv函数才能关联。使用section/grade
进行定位。
更新功能仍在进行中
function xml2csv($xmlFile, $xPath) {
$xml = simplexml_load_file($xmlFile);
$path = $xml->xpath($xPath);
$csvData = '';
foreach($path as $item) {
$attributes = $item->attributes();
$gradeLevel = $attributes['gradeLevel'];
foreach ($item->level as $level) {
foreach ($level->file as $file) {
$csvData .= '"' . trim($gradeLevel) . '"' . ',';
$csvData .= '"' . trim($level->attributes()->dirname) . '"' . ',';
$csvData .= '"' . trim($file->attributes()->filename) . '"' . ',';
$csvData .= '"' . trim($file) . '"' . ',';
$csvData .= "\n";
}
}
$csvData = trim($csvData, ',');
$csvData .= "\n";
}
return $csvData;
}