使用 sql:use-cdata 创建 CDATA 节 (SQLXML 4.0)

在 XML 中,CDATA 节用于对那些所含字符不转义则会识别为标记字符的特定文本块进行转义。

Microsoft SQL Server 中的数据库有时可以包含 XML 分析程序视为标记字符的字符;例如,尖括号 (< 和 >) ,小于或等于符号 (<=) ,和号 (&) 被视为标记字符。 但是,可以在 CDATA 节中对这类特殊字符进行包装,使它们不被视为标记字符。 XML 语法分析程序将 CDATA 节中的文本视为纯文本。

注释sql:use-cdata用于指定SQL Server返回的数据应包装在 CDATA 节中 (也就是说,它指示指定的列sql:field的值是否应包含在 CDATA 节) 中。 可以仅对映射到数据库列的元素指定 sql:use-cdata 批注。

sql:use-cdata 批注接受布尔值(0 = false,1 = true)。 可接受的值为 0、1、true 和 false。

该批注不能与 sql:url-encode 一起使用,也不能对 ID、IDREF、IDREFS、NMTOKEN 和 NMTOKENS 属性类型使用。

示例

若要创建使用以下示例的工作示例,必须满足某些要求。 有关详细信息,请参阅 运行 SQLXML 示例的要求

A. 在元素上指定 sql:use-cdata

在以下架构中, sql:use-cdata 对于 Address 元素中的<>AddressLine1,设置为 1> (True) <。 结果,将在 CDATA 节中返回数据。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Address"   
               sql:relation="Person.Address"   
               sql:key-fields="AddressID" >  
   <xsd:complexType>  
        <xsd:sequence>  
          <xsd:element name="AddressID"  type="xsd:string" />  
          <xsd:element name="AddressLine1" type="xsd:string"   
                       sql:use-cdata="1" />  
        </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
针对架构测试示例 XPath 查询
  1. 复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 UseCData.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。 在保存 UseCData.xml 的相同目录中将文件另存为 UseCDataT.xml。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="UseCData.xml">  
            /Address[AddressID < 11]  
        </sql:xpath-query>  
    </ROOT>  
    

    为映射架构 (UseCData.xml) 指定的目录路径相对于保存模板的目录。 也可以指定绝对路径,例如:

    mapping-schema="C:\SqlXmlTest\UseCData.xml"  
    
  3. 创建并使用 SQLXML 4.0 测试脚本 (Sqlxml4test.vbs) 执行该模板。

    有关详细信息,请参阅 使用 ADO 执行 SQLXML 4.0 查询

部分结果集如下:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
  <Address>   
    <AddressID>1</CustomerID>   
    <AddressLine1>   
      <![CDATA[ 1970 Napa Ct.  ]]>   
    </AddressLine1>   
  </Address>  
  <Address>  
    <AddressLine1>   
      <![CDATA[ 9833 Mt. Dias Blv. ]]>   
    </AddressLine1>   
  </Address>  
  ...  
</ROOT>