XML文档中的![CDATA []]节点有什么作用

本文概述

  • 什么以及为什么使用它
  • 如何使用它
  • 最后的提示和结论
什么以及为什么使用它 CDATA代表字符数据。你可以使用它来转义一些字符, 否则这些字符将被视为常规XML。其中的数据将不会被解析。例如, 如果要传递包含< 或> 的数学方程式, 则可以使用CDATA来完成。否则, 你将得到一个错误, 因为它将被解析为常规XML并且将是无效的。
以下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文档, 你将得到:
XML文档中的![CDATA []]节点有什么作用

文章图片
请注意, 你也可以解决此问题, 将这些字符编码为其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节点, 它们也不会被解析, 因为这是该节点的内容)

    推荐阅读