使用DOMDocument在简单的xml文档中添加&符号



好吧,这里是交易,我从我的网页数据库中恢复数据,并创建一个xml与导入该数据到我的本地数据库的唯一目的。我这样做是因为我的本地DB中的数据非常具体,我不想用无用的信息填充它,所以我所做的是:

<?php
ini_set( 'default_charset', 'UTF-8' );
$ID = $_GET['ID'];
$personInfo = GetPersonSoftwareByID($ID); //this is a function that i created on my own
//xml section
$domTree = new DOMDocument('1.0', 'UTF-8');
$rootXML = $domTree->createElement( 'XML' );
$rootXML = $domTree->appendChild($rootXML);
$personalSoftware = $domTree->createElement( 'PERSON_SOFTWARE' );
$personalSoftware = $rootXML->appendChild($personalSoftware);
$soft = $domTree->createElement('SOFTWARE');
$level = $domTree->createElement('LEVEL');
$soft->nodeValue = $softwares[software];// here the value is = 'Plant&ID'
$level->nodeValue = $softwares[level];
$soft = $personalSoftware ->appendChild($soft);
$level = $personalSoftware ->appendChild($level);
header('Content-type: text/xml; charset=UTF-8');
header('Content-Disposition: attachment; filename="test.xml");
echo $domTree->saveXML();
?>

,但当我试图创建XML出来:警告:main() [function.]:未终止的实体引用ID在xx行

我已经尝试过htmlentities和XML被创建,但当我尝试用simplexml_load_string导入时,我得到了一大堆警报,但不是&而不是与其他字符,如&阿蒂尔德;和³

是否有一种方法来修复或保存在xml中的DB?顺便说一下,存储在网页数据库和本地数据库中的数据是西班牙语的信息

提前感谢!

这是PHP中的一个bug,影响DOMNode::$nodeValue, DOMDocument::createElement()afaik甚至SimpleXML。

您可以通过创建文本节点并附加它来轻松避免它。

$dom = new DOMDocument();
$dom
  ->appendChild($dom->createElement('company'))
  ->appendChild($dom->createTextNode('A & B & C'));
echo $dom->saveXml();

您仍然可以将$nodeValue设置为空字符串以删除节点的内容,但我不会使用它来设置文本值

最新更新