我打算创建一个自定义XML格式,并使用XSD对其进行验证。因此,我想创建一个可以验证我的自定义XML的XSD,其中包含自定义元素可以包含任何有效的HTML标记,HTML标记可以包含我的自定义元素。
我的自定义xml示例。
<?xml version="1.0" encoding="UTF-8"?>
<root-custom-element type='card/text'>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Avenir; color: #010101">
<span style="font-family: 'Avenir-Roman'; font-weight: normal; font-style: normal; font-size: 20.00pt">Hello
Some text
</span>
</p>
<resource-element type="image/jpeg" resource-id="lh6rdbf14a0e023724d918086d0b8d77152e7"></resource-element>
<p>
<span>
test text
</span>
<span>
fkgfiughs
</span>
</p>
<p>
<resource-element type="audio/x-aac" resource-id="lh6rdcf34bf0fc03849348a1875fe2e8d1192"></resource-element>
</p>
</root-custom-element>
我创建的测试架构
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="custom-html.xsd"
namespace="http://www.w3.org/1999/xhtml" />
<xs:element name="root-custom-element" type="rootCustomElement" />
<xs:element name="resource-element" type="resourceElement" />
<xs:complexType name="resourceElement">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="resource-id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="rootCustomElement">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="resource-element" />
<xs:any namespace="xhtml:http://www.w3.org/1999/xhtml" processContents="strict" />
</xs:choice>
</xs:sequence>
<xs:attribute name="bgcolor" type="xs:string" />
<xs:attribute name="type" type="xs:string" />
</xs:complexType>
</xs:schema>
但是当我尝试针对模式验证xml时,我得到了错误
Exception: cvc-complex-type.2.4.a: Invalid content was found starting with element 'p'. One of '{resource-element, WC["http://www.w3.org/1999/xhtml"]}' is expected.
custom-html.xsd架构是xhtml-strict.xsd的修改版本,仅包含我需要的html标签。 'p'就是其中之一。