这是我的一个项目的代码片段,我已经找到了用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();
}
答案 0 :(得分:1)
如果您或者更好 - 另一位开发人员需要嵌套元素和多个子元素,那将很难阅读和维护。
答案 1 :(得分:0)
您应该对您的值进行编码,以便<
,"
等字符不会破坏您的xml:
htmlspecialchars($v->getTitle(), ENT_QUOTES)
等