我在这里遇到一个小问题:
我有一个生成xml数据的php文件。
$requestXmlBody .= "<Version>$compatabilityLevel</Version>";
现在有从上层PHP代码中提取的变量,并且还生成了HTML
$requestXmlBody .=
'<Description>
<![CDATA[
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!--some JS-->
</script>
<img src="http://www.myserver.com/pic.jpg" class="etalage_thumb_image" />
</body>
</html>
]]>
</Description>';
现在很奇怪我不能混合变量和HTML代码。 如您所见,我使用CDATA作为HTML。我想使用变量作为图像名称而不是固定链接。所以代码看起来像这样
$requestXmlBody .= '<Description>
<![CDATA[
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!--some JS-->
</script>
<img src="$imagelink" class="etalage_thumb_image" />
</body>
</html>
]]>
</Description>';
但这不起作用。我试过这个
$requestXmlBody .= '<Description>
<![CDATA[
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!--some JS-->
</script>
<img src="]]>$imagelink<![CDATA[" class="etalage_thumb_image" />
</body>
</html>
]]>
</Description>';
但这也行不通。我甚至试图将php变量(我从会话btw中获取)移交给JS变量并将其包含在document.write中
仍然没有成功。
这个会起作用
$requestXmlBody .= '<Description>
$imagelink
</Description>';
但不能与上面生成的HTML代码一起使用。
感谢任何帮助。
由于
答案 0 :(得分:0)
最好的方法是使用writeCData方法。
$link= 'link goes here';
$imagelink = '<img src="'.$link.'" /> ';
// serve xml doc as xml
header('Content-type: application/xml');
// set up the document
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('description');
// CData output
$xml->writeCData($imagelink);
$xml->endElement();
// end the document and output
$xml->endElement();
echo $xml->outputMemory(true);
答案 1 :(得分:0)
分开关注。不要一次做几件事。如果将嵌入式HTML拆分为自己的变量,则会更加容易。
只要您从XML上下文中“释放”了HTML字符串,您就会发现问题仍然存在。它是由引用带单引号的字符串引起的,这会阻止插值。您必须使用字符串连接而不是直接嵌入变量。
$description = '<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!--some JS-->
</script>
<img src="' . $imagelink . '" class="etalage_thumb_image" />
</body>
</html>';
$requestXmlBody .= '<Description>
<![CDATA[' . $description . ']]>
</Description>';
请确保您的HTML字符串本身不包含CDATA部分,因为CDATA部分不能嵌套。