PHP DOMDocument::使用utf-8 xml输入加载xml

PHP DOMDocument::使用utf-8 xml输入加载xml,php,dom,Php,Dom,对于以下代码,当我将 $doc = new DomDocument('1.0'); 我收到了警告 DOMDocument::saveXML() xmlEscapeEntities:字符超出范围 当我把 $doc = new DomDocument('1.0','UTF-8'); 我在$xmldoc=DOMDocument::loadXML($xml)中得到了错误的值 有密码 function readXsltTemplateAdmin($XsltFileName,$arrData,$para

对于以下代码,当我将

$doc = new DomDocument('1.0');
我收到了警告 DOMDocument::saveXML() xmlEscapeEntities:字符超出范围

当我把

$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; 
    }   
函数readXsltTemplateAdmin($XsltFileName、$arrData、$params=“”、$other=“”、$number=“”)
{
//从数组中删除XML
/**底漆:
*$xml=$v)
{
$child=$doc->createElement($k);
$child=$root->appendChild($child);
$value=$doc->createTextNode($v);
$value=$child->appendChild($value);
}
}
foreach($params作为$ParamKey=>$ParamValue)
{
$child=$doc->createElement($ParamKey);
$child=$root->appendChild($child);
$value=$doc->createTextNode($ParamValue);
$value=$child->appendChild($value);
}           
}   
如果(sizeof($arrData)>0)
{
对于($i=0;$icreateElement(“数据行”);
$occ=$root->appendChild($occ);
foreach($arrData[$i]作为$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))或die();
fclose($handle);
$xmldoc=DOMDocument::loadXML($xml);
$xsldoc=DOMDocument::loadXML($xsl);
$proc=new XSLTProcessor();
$proc->RegisterHPFunctions();
$proc->importStyleSheet($xsldoc);
$output=$proc->transformToXML($xmldoc);
返回$output;
}   

loadXML
不是一个静态函数,所以像
DOMDocument::loadXML
那样调用它是错误的。 您应该使用dom实例:
$doc->loadXML($xml);


除此之外,您的代码很好,并且生成了它所需要的内容—我没有测试xsl内容,因为我不知道
$XsltFileName

$XsltFileName是xslt模板的名称