本文概述
- 什么以及为什么使用它
- 如何使用它
- 最后的提示和结论
以下xml文档将被错误地解析, 因为比利时华夫饼的描述包含” 5 < 6″ :
<
?xml
version="1.0"
encoding="UTF-8"?>
<
breakfast_menu>
<
food>
<
name>
Belgian Waffles<
/name>
<
price>
$5.95<
/price>
<
description>
Our famous Belgian Waffles with plenty of real maple syrup. 5 <
6
<
/description>
<
calories>
650<
/calories>
<
/food>
<
food>
<
name>
French Toast<
/name>
<
price>
$4.50<
/price>
<
description>
Thick slices made from our homemade sourdough bread<
/description>
<
calories>
600<
/calories>
<
/food>
<
/breakfast_menu>
如果你验证先前的xml文档, 你将得到:
文章图片
请注意, 你也可以解决此问题, 将这些字符编码为其html实体(例如, 使用php中的html_entities)。
<
example-code>
while (x &
lt;
len &
amp;
&
amp;
!done) {
print( &
quot;
Hello.&
quot;
);
++x;
}<
/example-code>
但是, 这可能会变得棘手, 因为你需要注意何时对这些实体进行编码和解码, 因此建议改用CDATA。
如何使用它 可以在可能出现字符数据的任何地方添加CDATA节;它们用于转义包含字符的文本块, 否则这些字符将被视为标记。 CDATA节以字符串” < ![CDATA [“ ]开头, 以字符串” ]]> ” 结尾。
只需使用CDATA标签包装节点的内容即可:
<
node>
<
![CDATA[
Hello, here its my <
b>
HTML content<
/b>
parsed with html tags as data without issues. And yes, 5 <
6 :)]]>
<
/node>
【XML文档中的![CDATA []]节点有什么作用】因此, 应该解决第一个示例文档问题, 将内容包装在cdata标记中:
<
?xml
version="1.0"
encoding="UTF-8"?>
<
breakfast_menu>
<
food>
<
name>
Belgian Waffles<
/name>
<
price>
$5.95<
/price>
<
description>
<
![CDATA[
Our famous Belgian Waffles with plenty of real maple syrup. 5 <
6
]]>
<
/description>
<
calories>
650<
/calories>
<
/food>
<
food>
<
name>
French Toast<
/name>
<
price>
$4.50<
/price>
<
description>
Thick slices made from our homemade sourdough bread<
/description>
<
calories>
600<
/calories>
<
/food>
<
/breakfast_menu>
而不是将字符转换为html实体, 我们将改为使用:
<
example-code>
<
![CDATA[while (x <
len &
&
!done) {print( "Hello." );
++x;
}]]>
<
/example-code>
派上用场不是吗?
最后的提示和结论
- 在CDATA中, 内容中不能包含字符串]]>
(CDEnd), 否则xml也将被错误地解析。
- 从句法上讲, 它的行为类似于注释, 但cdata标记仍是文档的一部分。
- CDATA节无法嵌套文档节点(即使是有效的xml节点, 它们也不会被解析, 因为这是该节点的内容)
推荐阅读
- 如何下载github存储库的单个文件夹
- 如何在Windows中使用命令提示符执行symfony 3命令
- 如何解决Windows的git(Powershell和GitHub应用程序)中的”文件名过长”错误
- 如何使用FOSOAuthServerBundle从数据库中清除所有过期的令牌
- 如何使用Doctrine和Symfony 3实现全文搜索(MySql)
- 如何在Symfony 2.8中使用FOSUserBundle实现用户系统
- 如何将Chrome Inspect Tools主题更改为Dark
- Firebase Android(数据库增长时出现问题)
- iMessage App如何调整图像大小并保持纵横比