我正在使用此代码编辑xml文件
$xml = simplexml_load_file($xmlfile) or die ("Unable to load XML file!");
$event->title = $newtitle;
$event->description = $newdescription;
file_put_contents($xmlfile, $xml->asXML());
我想在说明中添加CDATA。我使用了这段代码
$event->description = '<![CDATA['.$newdescription.']]>';
但是在xml中,<
和>
被转换为<
和>
。我如何保留CDATA
原样。是其他任何方法进行编辑。谢谢。
其实我想编辑这个xml文件
<events date="06-11-2010">
<event id="8">
<title>Proin porttitor sollicitudin augue</title>
<description><![CDATA[Lorem nunc.]]></description>
</event>
</events>
<events date="16-11-2010">
<event id="4">
<title>uis aliquam dapibus</title>
<description><![CDATA[consequat vel, pulvinar.</createCDATASection></description>
</event>
<event id="1"><title>You can use HTML and CSS</title>
<description><![CDATA[Lorem ipsum dolor sit amet]]></description></event></events>
带id
答案 0 :(得分:3)
我认为当您的需求更复杂且不再简单时,您需要使用DOM。方法createCDATASection。
这是一个基本的例子:
$dom=new DOMDocument();
$xml='data.xml';
$dom->load($xml);
$cdata=$dom->createCDATASection('<p>Foo</p>');
foreach ($dom->getElementsByTagName('item') as $item) {
$item->getElementsByTagName('content')->item(0)->appendChild($cdata);
}
$dom->save($xml);
与此相关的XML:
<?xml version="1.0" encoding="utf-8"?>
<data>
<item>
<title>Test</title>
<content><![CDATA[<p>Foo</p>]]></content>
</item>
</data>
关于您的示例和评论,以下内容可以为您提供帮助:
$dom=new DOMDocument();
$dom->validateOnParse = true;
$xml='data.xml';
$dom->load($xml);
// Unless the ID attribute is recognised
foreach ($dom->getElementsByTagName('event') as $event) {
$event->setIdAttribute('id', true);
}
$event = $dom->getElementById("1");
foreach ($event->getElementsByTagName('description') as $description) {
$cdata=$dom->createCDATASection('<p>'. $description->nodeValue .'</p>');
$description->replaceChild($cdata, $description->childNodes->item(0));
}
$dom->save($xml);
答案 1 :(得分:2)
基本上,SimpleXML
将转义XML使用的所有值,因此使用CDATA
节点的许多原因都不存在。但是,如果您确实需要它们,则无法在SimpleXML
中完成,请使用其他替代方法,例如DOMDocument
,它的功能为createCDATASection()
答案 2 :(得分:-2)
尝试
$xml = simplexml_load_file($xmlfile,'SimpleXMLElement', LIBXML_NOCDATA);