我正在尝试从数据库表创建以下XML。这是XML
<groups>
<group id="1" name="DEBUG"/>
<group id="2" name="ORSP">
<group id="3" name="PRE">
<group id="4" name="TRANS"/>
<group id="5" name="OPP"/>
</group>
<group id="6" name="POST">
<group id="7" name="DGM"/>
</group>
</group>
</groups>
这是数据库的简单表
GROUP_ID | GROUP_NAME | GROUP_PARENT
1 DEBUG NULL
2 ORSP NULL
3 PRE 2
4 TRANS 3
5 OPP 3
6 POST 2
7 DGM 6
这是我目前的代码。我正在尝试返回一个DomElement 但是我永远无法获得上述XML。使用字符串我能够生成XML。欢迎任何建议。
public function process(){
$xml = '<groups>';
$xml .= $this->getAllGroups();
$xml .= '</groups>';
return $xml;
}
public function getAllGroups($groupID=null){
$where = null;
$placeholder = array();
$xml = null;
if (is_null($groupID)){
$where = " GROUP_PARENT IS NULL ";
}
else {
$where = " GROUP_PARENT=?";
$placeholder=array($groupID);
}
$sql = "SELECT
GROUP_ID,
GROUP_NAME
FROM
GROUPS
WHERE
$where";
$data = $this->dbh->executeSql($sql,$placeholder);
foreach ($data["records"] as $row) {
$groupID = $row["GROUP_ID"];
$groupName = $row["GROUP_NAME"];
//$groupElement = $this->xml->createElement("group");
//$groupElementID = $this->xml->createAttribute("id");
//$groupElementName = $this->xml->createAttribute("name");
//$groupElementID->value = $groupID;
//$groupElementName->value = $groupName;
//$groupElement->appendChild($groupID);
//$groupElement->appendChild($groupName);
//$passedXML->appendChild($groupElement);
//$this->getAllGroups($groupID);
$xml .= "<group id='$groupID' name='$groupName'>";
$xml .= $this->getAllGroups($groupID);
$xml .= "</group>";
}
return $xml;
}
答案 0 :(得分:0)
玩完代码后,我神奇地找到了解决方案。把头撞到了墙上一天半。希望这可能在将来帮助其他人。
public function process(){
$xml = $this->getAllGroups();
return $xml;
}
public function getAllGroups(\DOMElement &$xml=null,$groupID=null){
$where = null;
$placeholder = array();
if (is_null($groupID)){
$where = " GROUP_PARENT IS NULL ";
$xml = $this->xml->createElement("groups");
}
else {
$where = " GROUP_PARENT=?";
$placeholder=array($groupID);
}
$sql = "SELECT
GROUP_ID,
GROUP_NAME
FROM
GROUPS
WHERE
$where";
$data = $this->dbh->executeSql($sql,$placeholder);
foreach ($data["records"] as $row) {
$groupID = $row["GROUP_ID"];
$groupName = $row["GROUP_NAME"];
$groupElement = $this->xml->createElement("group");
$groupElementID = $this->xml->createAttribute("id");
$groupElementName = $this->xml->createAttribute("name");
$groupElementID->value = $groupID;
$groupElementName->value = $groupName;
$groupElement->appendChild($groupElementID);
$groupElement->appendChild($groupElementName);
$xml->appendChild($groupElement);
$this->getAllGroups($groupElement,$groupID);
}
return $xml;
}