以这种方式创建XML Feed有什么问题吗?

时间:2014-05-22 02:24:06

标签: php xml coding-style simplexml domdocument

这是我的一个项目的代码片段,我已经找到了用php创建XML文档的方法,并找到了使用SimpleXMLElement或DOMDocument的建议,但是下面的方法有什么问题吗?它似乎更简单。

注意:这个问题的重点是获得每种方法的优缺点,即使它们都能正常工作。

public function getXML() {

    $sc = function($str) {
        return htmlspecialchars($str, ENT_QUOTES);
    };

    $XMLString = '<?xml version="1.0" encoding="UTF-8" ?>'
            . '<playlist>'
            . '<id>' . $sc($this->getID()) . '</id>'
            . '<title>' . $sc($this->getTitle()) . '</title>'
            . '<description>' . $sc($this->getDescription()) . '</description>'
            . '<numVideos>' . $sc($this->getNumOfVideos()) . '</numVideos>';
    foreach ($this->videoList as $v) {
        $XMLString.= '<video>'
                . '<id>' . $sc($v->getID()) . '</id>'
                . '<title>' . $sc($v->getTitle()) . '</title>'
                . '<duration>' . $sc($v->getDuration()) . '</duration>'
                . '<thumbnail>' . $sc($v->getThumbnail()) . '</thumbnail>'
                . '<datePublished>' . $sc($v->getDatePublished()) . '</datePublished>'
                . '<description>' . $sc($v->getDescription()) . '</description>'
                . '<views>' . $sc($v->getViews()) . '</views>'
                . '<favorites>' . $sc($v->getFavorites()) . '</favorites>'
                . '<numRated>' . $sc($v->getNumRaters()) . '</numRated>'
                . '<author>' . $sc($v->getAuthor()) . '</author>'
                . '</video>';
    }
    $XMLString.= "</playlist>";

    return $XMLString
}

经节

public function getXML() {

    $sc = function($str) {
        return htmlspecialchars($str, ENT_QUOTES);
    };
    $playlist = new SimpleXMLElement("<playlist></playlist>");
    $playlist->addChild("id", $sc($this->getID()));
    $playlist->addChild("title", $sc($this->getTitle()));
    $playlist->addChild("description", $sc($this->getDescription()));
    $playlist->addChild("numVideos", $sc($this->getNumOfVideos()));
    foreach ($this->videoList as $k => $v) {
        $videos = $playlist->addChild("videos");
        $videos->addChild('id', $sc($v->getID()));
        $videos->addChild('title', $sc($v->getTitle()));
        $videos->addChild('duration', $sc($v->getDuration()));
        $videos->addChild('thumbnail', $sc($v->getThumbnail()));
        $videos->addChild('datePublished', $sc($v->getDatePublished()));
        $videos->addChild('description', $sc($v->getDescription()));
        $videos->addChild('views', $sc($v->getViews()));
        $videos->addChild('favorites', $sc($v->getFavorites()));
        $videos->addChild('numRated', $sc($v->getNumRaters()));
        $videos->addChild('author', $sc($v->getAuthor()));
    }


    return $playlist->asXML();
}

2 个答案:

答案 0 :(得分:1)

如果您或者更好 - 另一位开发人员需要嵌套元素和多个子元素,那将很难阅读和维护。

答案 1 :(得分:0)

您应该对您的值进行编码,以便<"等字符不会破坏您的xml:

htmlspecialchars($v->getTitle(), ENT_QUOTES)