XML中PCDATA处理内的CDATA

如何解决XML中PCDATA处理内的CDATA

如果我们具有以下XML元素:

<x>a &lt; b</x>

和另一个

<y>a<![CDATA[ < ]]>b</y>

两个元素xy的值都为a < b吗?第二个示例是否有效,通用,推荐或类似的内容

AFAK y具有三个子元素-PCDATA a,CDATA <和PCDATA b,并且某些库完全像这样解析它。另一方面,https://pugixml.org/仅返回a作为x(帮助函数)的值。

解决方法

两者之间存在根本区别:

CDATA 表示字符数据,而 PCDATA 表示已解析字符数据,这已经为我们提供了一个提示解析器可能会表现不同的正确方向,具体取决于它们的一致性级别。

CDATA节是<![CDATA[]]>标记之间的所有内容的严格且纯粹的转义。在此之间编写的所有内容都不应该由XML处理器进行解析!符合标准的XML解析器只会忽略此处的任何内容,并将其不可见地传递给请求XML的任何应用程序(然后可以自由处理XML)。这就是为什么我们可以在此处放置任何通配符数据而不会使XML无效的原因。

&lt;实体,更具体地说是字符实体。实体是“占位符”或“标记”,它们被内容替换。这意味着一个实体也是 PCDATA (已解析字符DATA)。它由XML解析器解析,然后解析它(尝试解析它的内容),以便它可以用它代替实体。

从数据的开始,我们可能需要了解更多有关请求XML的应用程序的信息。在XML处理工具(XSD,XSLT,XPath,XQuery等)的域内,在两种情况下,它都应以text()xs:string()或{{ 1}},具体取决于您用来访问它的功能。例如:

xs:untypedAtomic
let $t := <xml>Text <![CDATA[test]]> bla.</xml>
return $t/data() instance of xs:untypedAtomic
let $t := <xml>Text <![CDATA[test]]> bla.</xml>
return $t/string() instance of xs:string

所有结果都在let $t := <xml>Text <![CDATA[test]]> bla.</xml> return $t/text() instance of text() 中。

对于任何不能与XML数据模型一起使用的应用程序,结果应该只是文本,位于元素标签之间。

有一些interesting note here和整个主题相关的主题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?