0

我想在 XML 文件中使用 html 标记,因此在我的 xsd 文件中,我允许通过以下方式进行 html 格式化:

        <xs:element name="description">
            <xs:complexType mixed="true">
                <xs:sequence>
                    <xs:any namespace="http://www.w3.org/1999/xhtml"
                            processContents="lax"
                            minOccurs="0"
                            maxOccurs="unbounded" />
                </xs:sequence>          
            </xs:complexType>
        </xs:element>

在我的 XML 文件中

<description>
    <p xmlns="http://www.w3.org/1999/xhtml"> This course is an introduction to the information technologies required for secure, practical information systems for electronic commerce.
Topics will be chosen from areas such as document representation (XML, DTDs, XML Schema, XSLT, CSS), 
</p> security (encryption, public key, symmetric key, 
PKI, authentication); kinds of attack and vulnerabilities, electronic trading (spontaneous, deliberative, auctions), electronic document management 
(metadata, search, digital libraries, management and processing), recent developments and maturation of the area, 
such as web application frameworks, web services, the semantic web , mobile commerce </description>

但是,当我将其更改为 HTML 文件时,它不显示任何内容!(没有 p)

我无法将 html 标记放在 xsl 文件中,因为我想在描述标记(XSD 的一个元素)中划分内容。如果有任何新颖的方式我会接受。

起初,甚至<p xmlns="http://www.w3.org/1999/XHTML">没有工作,我把 processContents="lax" 和它工作得很好,但仍然显示一大堆段落(所以<p>不是真的工作)

我怎样才能让它工作?

4

2 回答 2

7

将 html 内容包装在CDATA标签中:

<![CDATA[<p>stuff</p>]]>

来自 msdn:

当 XML 解析器遇到首字母<![CDATA[时,它会将后面的内容报告为字符,而不尝试将它们解释为元素或实体标记。字符引用在 CDATA 部分中不起作用。当遇到 concluding]]>时,解析器停止报告并返回正常解析。

于 2012-09-19T01:54:09.437 回答
3

使用您提供的最小示例,XML 将根据您提供的 XSD 片段进行验证(在添加 anxs:schema作为根元素之后。)

例子.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="description">
    <xs:complexType mixed="true">
        <xs:sequence>
            <xs:any namespace="http://www.w3.org/1999/xhtml"
                processContents="lax"
                minOccurs="0"
                maxOccurs="unbounded" />
        </xs:sequence>          
    </xs:complexType>
    </xs:element>
</xs:schema>

测试.xml:

<description>
    <p xmlns="http://www.w3.org/1999/xhtml"> This course is an introduction to the information technologies required for secure, practical information systems for electronic commerce.
Topics will be chosen from areas such as document representation (XML, DTDs, XML Schema, XSLT, CSS), 
</p> security (encryption, public key, symmetric key, 
PKI, authentication); kinds of attack and vulnerabilities, electronic trading (spontaneous, deliberative, auctions), electronic document management 
(metadata, search, digital libraries, management and processing), recent developments and maturation of the area, 
such as web application frameworks, web services, the semantic web , mobile commerce </description>

验证:

$ xmllint --noout --schema example.xsd test.xml 
test.xml validates

所以我不确定你的问题是什么。

想到的一个问题是您可能没有使用 xhtml。您包含在description元素中的 HTML(或任何 HTML)必须是有效的 xml(因此是 xhtml,而不是草率的 sgml 式 html 语法),包括使任何 xhtml 命名字符实体(例如,&nbsp;)可用于模式验证器。您在网上找到的几乎所有 html 都绝对不是有效的 xml。

如果您想让 html 可用于 XML 处理器和验证,请使用XHTML 1.0 xsd或(更灵活地)混合和匹配XHTML 1.1及其 XSD 中可用的模块。

如果这对您来说太麻烦并且您可以将 HTML 内容视为文本块,只需将其作为文本内容包含并修改您的 xsd 架构以期望xs:stringxs:normalizedString作为元素的内容description

于 2012-09-19T03:02:14.183 回答