【问题标题】:PHP creating a recursive DomDocumentPHP 创建递归 DomDocument
【发布时间】:2015-04-27 12:37:29
【问题描述】:

我正在尝试从数据库表中创建以下 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;
    }

【问题讨论】:

  • 我认为您应该发布要修复的代码,而不是有效的代码。

标签: php xml recursion


【解决方案1】:

在玩过代码后,我神奇地找到了解决方案。为了这个,我把头撞在墙上一天半。希望这可能对其他人有所帮助。

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多