2013-04-21 120 views
0

對於後續的代碼,當我把PHP的DOMDocument :: loadXML的使用UTF-8 XML輸入

$doc = new DomDocument('1.0'); 

我被警告在 DOM文檔:: saveXML() xmlEscapeEntities的:char超出範圍

當我把

$doc = new DomDocument('1.0','UTF-8'); 

我在$ xmldoc = DOMDocument :: loadXML($ xml)中得到了錯誤的值;

有代碼

function readXsltTemplateAdmin($XsltFileName,$arrData,$params="",$other="",$number="") 
    { 

     //  kreate XML from array 
     /** primer: 
     * $xml = <<<EOB 
     * <alldata> 
     * <datarow> 
     * <name>sasa</name> 
     * <comment>aab</comment> 
     * </datatrow> 
     * <datatrow> 
     * <name>dragana</name> 
     * <comment>eeeee</comment> 
     * </commentrow> 
     * </alldata> 
     * EOB; 
     */ 

     $doc = new DomDocument('1.0','UTF-8'); 
     //$doc = new DomDocument('1.0'); 

     // root 
     $root = $doc->createElement('alldata'.$number); 
     $root = $doc->appendChild($root); 

     if (is_array($other) || is_array($params)) 
     { 
      if($other!="") 
      { 
       foreach($other as $k => $v)  
       { 
         $child = $doc->createElement($k); 
         $child = $root->appendChild($child); 
         $value = $doc->createTextNode($v); 
         $value = $child->appendChild($value);       
       } 
      } 

      foreach($params as $ParamKey => $ParamValue)   
      { 
       $child = $doc->createElement($ParamKey); 
       $child = $root->appendChild($child); 
       $value = $doc->createTextNode($ParamValue); 
       $value = $child->appendChild($value);       
      }   

     } 

     if (sizeof($arrData)>0) 
     { 
      for ($i=0;$i<sizeof($arrData);$i++) { 

       $occ = $doc->createElement("datarow"); 
       $occ = $root->appendChild($occ); 
       foreach ($arrData[$i] as $fieldname => $fieldvalue) { 

       $child = $doc->createElement($fieldname); 
       $child = $occ->appendChild($child); 


       $value = $doc->createTextNode($fieldvalue); 
       $value = $child->appendChild($value); 
       } 
      } 
     } 

     $xml = $doc->saveXML(); 

     $handle = fopen($XsltFileName, "r"); 

     $xsl = fread($handle, filesize($XsltFileName)) or die(); 

     fclose($handle);  

     $xmldoc = DOMDocument::loadXML($xml); 
     $xsldoc = DOMDocument::loadXML($xsl); 

     $proc = new XSLTProcessor() ; 
     $proc->registerPHPFunctions(); 
     $proc->importStyleSheet($xsldoc); 

     $output=$proc->transformToXML($xmldoc);   
     return $output; 
    } 

回答

0

loadXML是不是一個靜態的功能,所以這樣稱呼它DOMDocument::loadXML將是錯誤的。 你應該使用DOM實例:$doc->loadXML($xml);

其他然後,你的代碼是罰款和生產什麼自己的需要 - 我沒有測試XSL的東西,因爲我不知道,應該是在$XsltFileName

+0

內容$ XsltFileName是xslt模板的名稱 – sasa 2013-04-21 15:07:43

+0

好的 - 你還在收到錯誤嗎? – Adidi 2013-04-21 15:52:30