PDA

View Full Version : مشكل با بعضي از توابع DomDocument



Alen
شنبه 07 آذر 1388, 20:57 عصر
سلام
من از php ورژن 5.2.6 استفاده ميكنم و وقتي سعي مي كنم از مثالي كه از خود php.net استفاده كنم
مثال زير:


<?php
class MyDOMDocument extends DOMDocument
{
public function toArray(DOMNode $oDomNode = null)
{
// return empty array if dom is blank
if (is_null($oDomNode) && !$this->hasChildNodes()) {
return array();
}
$oDomNode = (is_null($oDomNode)) ? $this->documentElement : $oDomNode;
if (!$oDomNode->hasChildNodes()) {
$mResult = $oDomNode->nodeValue;
} else {
$mResult = array();
foreach ($oDomNode->childNodes as $oChildNode) {
// how many of these child nodes do we have?
// this will give us a clue as to what the result structure should be
$oChildNodeList = $oDomNode->getElementsByTagName($oChildNode->nodeName);
$iChildCount = 0;
// there are x number of childs in this node that have the same tag name
// however, we are only interested in the # of siblings with the same tag name
foreach ($oChildNodeList as $oNode) {
if ($oNode->parentNode->isSameNode($oChildNode->parentNode)) {
$iChildCount++;
}
}
$mValue = $this->toArray($oChildNode);
$sKey = ($oChildNode->nodeName{0} == '#') ? 0 : $oChildNode->nodeName;
$mValue = is_array($mValue) ? $mValue[$oChildNode->nodeName] : $mValue;
// how many of thse child nodes do we have?
if ($iChildCount > 1) { // more than 1 child - make numeric array
$mResult[$sKey][] = $mValue;
} else {
$mResult[$sKey] = $mValue;
}
}
// if the child is <foo>bar</foo>, the result will be array(bar)
// make the result just 'bar'
if (count($mResult) == 1 && isset($mResult[0]) && !is_array($mResult[0])) {
$mResult = $mResult[0];
}
}
// get our attributes if we have any
$arAttributes = array();
if ($oDomNode->hasAttributes()) {
foreach ($oDomNode->attributes as $sAttrName=>$oAttrNode) {
// retain namespace prefixes
$arAttributes["@{$oAttrNode->nodeName}"] = $oAttrNode->nodeValue;
}
}
// check for namespace attribute - Namespaces will not show up in the attributes list
if ($oDomNode instanceof DOMElement && $oDomNode->getAttribute('xmlns')) {
$arAttributes["@xmlns"] = $oDomNode->getAttribute('xmlns');
}
if (count($arAttributes)) {
if (!is_array($mResult)) {
$mResult = (trim($mResult)) ? array($mResult) : array();
}
$mResult = array_merge($mResult, $arAttributes);
}
$arResult = array($oDomNode->nodeName=>$mResult);
return $arResult;
}
}

$sXml = <<<XML
<nodes>
<node>text<node>
<node>
<field>hello<field>
<field>world<field>
<node>
<nodes>
XML;
$dom = new MyDOMDocument('1.0', 'iso-8859-1');
$dom->loadXml($sXml);
var_dump($dom->toArray());
?>


با اين خطا مواجه ميشم




Warning: domdocument::domdocument() expects parameter 2 to be long, string given in D:\wamp
\www\xmlSample1.php on line 75

Fatal error: Call to undefined method MyDOMDocument::loadXml() in D:\wamp\www\xmlSample1.php on line 76



ممكنه كمكم كنيد؟

Alen
یک شنبه 08 آذر 1388, 12:32 عصر
مرسي از توجهتون
بله ، دقيقا مشكل همينه ، مشكل اينه كه شيئي كه از كلاس DomDocument مي سازم بعضي از توابعي رو كه بايد نداره ، به ويژه توابع باز كردن xml كه حالا بهشون احتياج پيدا كردم،
جالب اينه كه مثلا xmlreader هم بعضي از توابعي رو كه تو php.net ديدم نداره
اونوقت اين توابع رو تو zend 5.5 هم نميتونم پيداشون كنم (بر خلاف ديگر توابع تو پنجره مربوط auto complete نمي آيند)
كه اين ورژن zend از php ورژن 5 پشتيباني ميكنه
بعدشم وقتي مينويسمشون وب سرورم (از wamp استفاده ميكنم)اين پيغام خطا رو ميده
گيج شدم اصلا