我正在處理一個新的類來包裝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