XML格式的CDATA格式

时间:2016-07-29 17:34:00

标签: xml

我在我的XML文件中使用CDATA,如下所示:

<markerHTML1><![CDATA[<center><u>Header Goes Here</u></center><br /><li>Example text goes here.</li><br /><li>You can even use <a href="http://www.weather.gov" target="_blank">links</a>.</li>]]></markerHTML1>

当一切都在上面的一行上时,它完美地运作。但是,我想使用多行,因此更容易编辑(而不是一直滚动一条长行),如下所示:

<markerHTML1>
   <![CDATA[<center><u>Header Goes Here</u></center><br />
      <li>Example text goes here.</li><br />
      <li>You can even use <a href="http://www.weather.gov"target="_blank">links</a>.</li>]]>
</markerHTML1>

问题是,当它在第二个例子中被格式化时,它不再有效。知道为什么会这样吗?

谢谢!

--- --- EDIT

这是引用标记markerHTML1,markerHTML2等

的PHP代码
for ($i=1;$i<=100;$i++){

$lat = $xml->{'markerLat'.$i};
$lon = $xml->{'markerLon'.$i};
$html = $xml->{'markerHTML'.$i};

        if(strlen($lat)>0){

        echo "L.marker(['$lat','$lon']).addTo(map).bindPopup('$html');\n";
        }

        else{
        #Break out of the loop since there are no more markers defined
        $i=100;
        }
}

1 个答案:

答案 0 :(得分:0)

看来这是:

L.marker(['$lat','$lon']).addTo(map).bindPopup('$html');

是JavaScript代码,是吗?如果您将$html值直接连接到该值,它将等同于:

L.marker(['33', '44']).addTo(map).bindPopup('<center><u>Header Goes Here</u></center><br />
  <li>Example text goes here.</li><br />
  <li>You can even use <a href="http://www.weather.gov"target="_blank">links</a>.</li>');

在字符串文字中间使用内联是无效的JavaScript(除非你在它们之前加上反斜杠),所以很可能你的JavaScript失败了。

即使您没有换行符,也可能由于各种原因而失败(例如,如果您的HTML包含单引号'

可能最简单的方法是将HTML编码为JSON:

$htmlJson = json_encode($html);

echo "L.marker(['$lat','$lon']).addTo(map).bindPopup($htmlJson);\n";

请注意,我已移除了$htmlJson周围的引号,因为它现在应该包含自己的引号。