我正在使用DOMDocument
和foreach
循环提取XML数据。我正在从XML文档中提取某些属性和节点值,并使用该数据创建变量。然后,我回显变量。
我已经成功完成了<VehicleDescription
标签之间的XML数据的第一部分的操作。但是,对<style>
标记中的数据使用相同的逻辑,我一直遇到问题。特别是,除非它们位于foreach
循环中,否则创建的变量将不会回显。请参阅下面的代码以进行澄清。
我的php:
<?php
$vehiclexml = $_POST['vehiclexml'];
$xml = file_get_contents($vehiclexml);
$dom = new DOMDocument();
$dom->loadXML($xml);
//This foreach loop works perfectly, the variables echo below:
foreach ($dom->getElementsByTagName('VehicleDescription') as $vehicleDescription){
$year = $vehicleDescription->getAttribute('modelYear');
$make = $vehicleDescription->getAttribute('MakeName');
$model = $vehicleDescription->getAttribute('ModelName');
$trim = $vehicleDescription->getAttribute('StyleName');
$id = $vehicleDescription->getAttribute('id');
$BodyType = $vehicleDescription->getAttribute('altBodyType');
$drivetrain = $vehicleDescription->getAttribute('drivetrain');
}
//This foreach loop works; however, the variables don't echo below, the will only echo within the loop tags. How can I resolve this?
foreach ($dom->getElementsByTagName('style') as $style){
$displacement = $style->getElementsByTagName('displacement')->item(0)->nodeValue;
}
echo "<b>Year:</b> ".$year;
echo "<br>";
echo "<b>Make:</b> ".$make;
echo "<br>";
echo "<b>Model:</b> ".$model;
echo "<br>";
echo "<b>Trim:</b> ".$trim;
echo "<br>";
echo "<b>Drivetrain:</b> ".$drivetrain;
echo "<br>";
//Displacement will not echo
echo "<b>Displacement:</b> ".$displacement;
?>
这是从中提取的XML文件:
<VehicleDescription country="US" language="en" modelYear="2019" MakeName="Toyota" ModelName="RAV4" StyleName="LE" id="1111" altBodyType="SUV" drivetrain="AWD">
<style modelYear="2019" name="Toyota RAV4 LE" passDoors="4">
<make>Toyota</make>
<model>RAV4</model>
<style>LE</style>
<drivetrain>AWD</drivetrain>
<displacement>2.5 liter</displacement>
<cylinders>4-cylinder</cylinders>
<gears>8-speed</gears>
<transtype>automatic</transtype>
<horsepower>203</horsepower>
<torque>184</torque>
</style>
</VehicleDescription>
任何关于第一个foreach循环中的变量为何回显而第二个变量都没有回声的帮助或见解,将不胜感激。
谢谢!
答案 0 :(得分:0)
错误出在XML文档中。
在<style>
标签内是另一组<style>
标签。更改第二组的名称可以解决此问题。
答案 1 :(得分:0)
只需为您解决此问题的方式发布替代解决方案。
如前所述,有两个<stlye>
标签,这意味着foreach
将尝试使用所有样式标签。但是,您知道自己只关注第一个标记的内容,因此可以删除foreach
循环并使用item()
方法...
$displacement = $dom->getElementsByTagName('style')->item(0)
->getElementsByTagName('displacement')->item(0)->nodeValue;
这也适用于您如何从<VehicleDescription>
标记中获取数据。放下foreach
并使用
$vehicleDescription = $dom->getElementsByTagName('VehicleDescription')->item(0);