我正在处理一个新的类来包装XML处理。如果安装了我想让我的类使用simplexml,如果不是,则需要内置的XML函数。任何人都可以给我一些关于骨架类的建议吗?用一堆if语句来抛弃每种方法似乎是“错误的”,并且这看起来似乎会使它几乎不可能正确地测试。XML的PHP包装类
任何前期建议将是伟大的!我想说的是these built-in xml functions。
我正在处理一个新的类来包装XML处理。如果安装了我想让我的类使用simplexml,如果不是,则需要内置的XML函数。任何人都可以给我一些关于骨架类的建议吗?用一堆if语句来抛弃每种方法似乎是“错误的”,并且这看起来似乎会使它几乎不可能正确地测试。XML的PHP包装类
任何前期建议将是伟大的!我想说的是these built-in xml functions。
你指的是哪个内置的xml函数? SimpleXml是一个标准扩展,它使用下面的libxml - 就像dom扩展一样。所以如果安装了dom扩展,那么SimpleXml也是如此。
我使用这样做XML翻译和内容:
假设XML结构是这样的(使用规则的结构很重要,意味着你可以拉过一些不错的敏捷技巧!):
<word name="nameofitem">
<en>value</en>
<pt>valor</pt>
<de>value_de</de>
</word>
,然后一个类来处理XML:
class translations
{
public $xml = null;
private $file = null;
private $dom = null;
function __construct($file="translations") {
// get xml
$this->file = $file;
$this->haschanges = false;
$this->xml = file_get_contents($_SERVER['DOCUMENT_ROOT']."/xml/".$file.".xml");
$this->dom = new DOMdocument();
$this->dom->loadXML($this->xml);
}
function updateNode($toupdate, $newvalue, $lang="pt",$rootnode="word"){
$this->haschanges = true;
$nodes = $this->dom->getElementsByTagName($rootnode);
foreach ($nodes as $key => $value) {
if ($value->getAttribute("name")==$toupdate) {
$nodes->item($key)->getElementsByTagName($lang)->item(0)->nodeValue = htmlspecialchars($newvalue,ENT_QUOTES,'UTF-8');
}
}
}
function saveUpdated(){
$toSave = $this->dom->saveXML();
if ($this->haschanges === true) {
file_put_contents($_SERVER['DOCUMENT_ROOT']."/xml/".$this->file.".xml", $toSave);
return true;
}
else {
return false;
}
}
}
我拿出几个我有方法,为了简便起见,我用的东西扩展,以处理文件和我法师上传等。
一旦你有了这一切,你可以这样做:
$xml = new translations();
// loop through all the language posts
foreach ($_POST["xml"]["en"] as $key => $value) {
$xml->updateNode($key, stripslashes($value), "en");
}
或什么的)希望这给你一些想法!
我做了它包装的SimpleXML功能的类...带你从那可就......
有一个奇怪的事情......它是SimpleXML的不允许它的构造函数会被重载,所以你不能在开始时做一些事情......比如覆盖输入值(也就是说,你可以在输入中接受XML)。我通过使用ArrayObject类来包装新的SimpleXml类来解决这个限制。
仅仅使用SimpleXml,DOM或任何其他可用的XML库有什么问题?另外,你认为什么*内置的XML函数*? – Gordon 2010-04-06 13:34:09
@戈登:如果SimpleXml不可用,我想有一个回退 – 2010-04-06 15:30:25
我不想再重新发明轮子。 – 2010-04-06 15:33:45