任何XSD边缘情况是否允许文本节点内的XML元素内容?
问题描述:
任何XSD边缘案例是否允许(未转义的)文本节点内的XML元素内容?例如。你可以把一个CDATA元素放在一个定义为xs:string的标签中并让它验证(不需要声明混合内容)?任何XSD边缘情况是否允许文本节点内的XML元素内容?
答
如果你有一个包含字符串即
<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2018 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root" type="xs:string" />
</xs:schema>
然后一个元素可以包含CDATA即
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Temp\XSDFile2.xsd">
Optional Text
<![CDATA[
<someXmlData></someXmlData>
]]>
Optional Text
</Root>
由于这种传递虽然有些解析器它可能会逃回到这一点,但两者是有效的和等效的。
<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="XSDFile2.xsd">
Optional Text
<someXmlData></someXmlData>
Optional Text
</Root>