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

在 XML 中,CDATA 节用于转义包含将被识别为标记字符的文本块。

Microsoft SQL Server 中的数据库有时可能包含 XML 分析器视为标记字符的字符;例如,尖括号(< 和 >)小于或等于符号(<=)和和号(&)被视为标记字符。 但是,可以在 CDATA 节中包装这种类型的特殊字符,以防止将其视为标记字符。 CDATA 节中的文本由 XML 分析程序视为纯文本。

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 示例的要求。

答: 在元素上指定 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. 复制以下模板,并将它粘贴到文本文件中。 将文件另存为 UseCDataT.xml 保存在保存 UseCData.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>