我真的希望有人能帮助我。
基本上,我试图根据该分支中的其他属性解析XML树中的某些XML属性。
作为我正在使用的XML类型的一个例子: -
<root>
<employees>
<team id="1643">
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1364"/>
<member id ="153461" jobtype="temporary" division="reception" rollnumber="1326"/>
<member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1312"/>
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1326"/>
</team>
<team id="1633">
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1244"/>
<member id ="153461" jobtype="temporary" division="reception" rollnumber="1569"/>
<member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1472"/>
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1112"/>
</team>
<team id="1674">
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1488"/>
<member id ="153461" jobtype="temporary" division="reception" rollnumber="1032"/>
<member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1886"/>
<member id ="153461" jobtype="permament" division="cleaning" rollnumber="1445"/>
</team>
</employees>
</root>
我要做的是为所有填写某些类别的员工获取rollnumber。所以我希望能够做一个看起来像“如果jobtype =”permanent“和division =”cleaning“那么echo rollnumber”。
现在,我试图用PHP解析它,基本上失败了。我失败了,因为我使用的语法如下: -
$team->xpath("//member[@jobtype='permament'][@division='cleaning']/@rollnumber")
这解析为数组。没问题。我可以将变量拉出数组。没问题。
问题是这个......
... PHP无法处理此代码生成的嵌套数组。它将初始数组保存在内存中,只是一遍又一遍地解析相同的变量。我已经尝试在每个循环结束时重置数组等,但这不起作用。 PHP似乎只能在foreach序列结束时销毁数组。
我真的想知道是否可以用PHP解析它?有没有解决这个问题?任何帮助/建议都会非常感激。
答案 0 :(得分:0)
所以这就是我要做的事情
//解析XML.class.php
/**
* This is the base class to load the XML.
* Individual scripts should extend this class for
* explicit functionality
*/
class ParseXML {
protected $xml;
public function __construct($xml) {
if(is_file($xml)) {
$this->xml = simplexml_load_file($xml);
} else {
$this->xml = simplexml_load_string($xml);
}
}
}
//解析Employees.extends.php
/**
* This class extends the parseXML class
*/
class ParseEmployees extends parseXML {
public function getRollNumberArray() {
$attr = false;
$el = $this->xml->xpath("//member[@jobtype='permament'][@division='cleaning']");
if($el && count($el) === 1) {
$attr = (array) $el[0]->attributes();
$attr = $attr['@attributes'];
}
return $attr;
}
}
使用方法:
// Add xml file/post
$xml_file = '/path/to/xml_file.xml';
// Need to include the two files above
include('ParseXML.class.php');
include('ParseEmployees.extends.php');
$emp = new ParseEmployees($xml_file);
$emp_rollnumber_arr = $emp->getRollNumberArray();
// Now you should be able to access the array and see the values
echo "Employees Role Numbers:<pre>".print_r($emp_rollnumber_arr,true)."</pre><br />";