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模板的名称