zoukankan      html  css  js  c++  java
  • XML Data Type Methods(一)

    XML Data Type Methods(一)
    /*XML Data Type Methods:
    1.The query('XQuery') method retrieves(vt.检索,重新得到) a subset of untyped XML from the target XML instance
     
    2.The value('XQuery',dataType) method returns a scalar value(标量值) from the targeted XML document.
        The returned value is converted to the data type you specify when you call the method.
     
    3.The exist('XQuery') method lets you test for the existence of an element or one of its values
     
    4.The nodes('XQuery') method returns what is essentially a table that includes one column. 
        That means you should use the method only in those parts of a statement that can handle rowset views, such as the FROM clause. 
        It also means that, when you call the nodes() method, you must assign a table alias and column alias to the rowset view returned by the method
    5.The modify('XQuery') method lets you update that data
    */
     
    DECLARE @StoresTable  TABLE
    (
      StoreID INT IDENTITY(1,1) PRIMARY KEY,
      Survey_untyped XML,
      Survey_typed XML
    )
     
     INSERT INTO @StoresTable(Survey_untyped,Survey_typed)
     VALUES
     (
      '<UnifiedRequest> 
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>',
    '<UnifiedRequest 
       xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns="http://tempuri.org/UnifiedRequest.xsd">
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>'
    )
     
    --1.UntypedColumn 
    --1.1 query(xpathParameter) method
    SELECT
      Survey_untyped.query('/UnifiedRequest/OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <OrderInfo>
      <CompanyCode>1003</CompanyCode>
      <PayTermsCode>024</PayTermsCode>
    </OrderInfo>
    */
    --1.2 value(xpathParameter) method
    SELECT
      Survey_untyped.value('(/UnifiedRequest/OrderInfo/CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    --1.3 exist(xpathParameter) method
    SELECT TOP(1)
      CASE
        WHEN Survey_untyped.exist('/UnifiedRequest/OrderInfo/CompanyCode/text()')=1 THEN 'Found'
        ELSE 'Not Found'
      END
    FROM
      @StoresTable
     
    --1.4 nodes(xpathParameter) method
    DECLARE @bikes XML
    SET @bikes =
      '<Products>
        <Product>Mountain</Product>
        <Product>Road</Product>
       </Products>'
    SELECT
      Category.query('./text()') AS BikeTypes1,--return a subset of xml
      Category.value('(./text())[1]','VARCHAR(20)') AS BikeTypes2--return string
    FROM
      @bikes.nodes('/Products/Product')
        AS Bike(Category);
    /*Result
        BikeTypes1 BikeTypes2
        ---------------------------
        Mountain    Mountain
        Road        Road
    */
     
     
     
    --2.TypedColumn which contains namespace
    --2.1 query(xpathParameter) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      Survey_typed.query('/UnifiedRequest/OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <p1:OrderInfo xmlns:p1="http://tempuri.org/UnifiedRequest.xsd">
      <p1:CompanyCode>1003</p1:CompanyCode>
      <p1:PayTermsCode>024</p1:PayTermsCode>
    </p1:OrderInfo>
    */
     
    ;WITH XMLNAMESPACES('http://tempuri.org/UnifiedRequest.xsd' AS UFD) 
    SELECT
      Survey_typed.query('/UFD:UnifiedRequest/UFD:OrderInfo') AS Info_typed
    FROM
      @StoresTable
    /*Result:
    <UFD:OrderInfo xmlns:UFD="http://tempuri.org/UnifiedRequest.xsd">
      <UFD:CompanyCode>1003</UFD:CompanyCode>
      <UFD:PayTermsCode>024</UFD:PayTermsCode>
    </UFD:OrderInfo>
    */
     
    SELECT
      Survey_typed.query('declare namespace UFR="http://tempuri.org/UnifiedRequest.xsd";
        /UFR:UnifiedRequest/UFR:OrderInfo') AS Info_typed
    FROM
      @StoresTable;
    /*Result:
    <UFR:OrderInfo xmlns:UFR="http://tempuri.org/UnifiedRequest.xsd">
      <UFR:CompanyCode>1003</UFR:CompanyCode>
      <UFR:PayTermsCode>024</UFR:PayTermsCode>
    </UFR:OrderInfo>
    */
     
    ;WITH XMLNAMESPACES('http://tempuri.org/UnifiedRequest.xsd' AS UFD) 
    SELECT
      Survey_typed.query('/UFD:UnifiedRequest') AS Info_typed
    FROM
      @StoresTable;
    /*Result:
    <UnifiedRequest xmlns="http://tempuri.org/UnifiedRequest.xsd" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <CommonInfo>
        <Version>1.14</Version>
        <Username>EC</Username>
      </CommonInfo>
      <OrderInfo>
        <CompanyCode>1003</CompanyCode>
        <PayTermsCode>024</PayTermsCode>
      </OrderInfo>
    </UnifiedRequest>
    */
     
     
    --2.2 value(xpathParameter,dataType) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      --Result:1003
      Survey_typed.value('(/UnifiedRequest/OrderInfo/CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    SELECT
      --Result:1003
      Survey_typed.value('declare namespace UFD="http://tempuri.org/UnifiedRequest.xsd";
    (/UFD:UnifiedRequest/UFD:OrderInfo/UFD:CompanyCode/text())[1]','INT') AS CompanyCode
    FROM
      @StoresTable
     
    --2.3 exist(xpathParameter) method
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT TOP(1)
      CASE
        WHEN Survey_typed.exist('/UnifiedRequest/OrderInfo/CompanyCode/text()')=1 THEN 'Found'
        ELSE 'Not Found'
      END
     
    FROM
      @StoresTable
     
    --2.4 nodes(xpathParameter) method
    DECLARE @bikes2 XML
    SET @bikes2 =
      '<Products xmlns="http://tempuri.org/UnifiedRequest.xsd">
        <Product>Mountain</Product>
        <Product>Road</Product>
       </Products>'
     
    ;WITH XMLNAMESPACES(DEFAULT 'http://tempuri.org/UnifiedRequest.xsd') 
    SELECT
      Category.query('./text()') AS BikeTypes1,--return a subset of xml
      Category.value('(./text())[1]','VARCHAR(20)') AS BikeTypes2--return string
    FROM
      @bikes2.nodes('/Products/Product') AS Bike(Category);
    /*Result
        BikeTypes1 BikeTypes2
        ---------------------------
        Mountain    Mountain
        Road        Road
    */
  • 相关阅读:
    Linux下安装Readis
    windows下的Redis安装:
    解决@ResponseBody不能和 <mvc:annotation-driven>同时使用的问题
    dom4j操作XML
    Ajax优缺点
    来一打前端博客压压惊
    tinypng upload一键压缩上传工具,告别人肉
    手把手教你撸一个简易的 webpack
    前端路由简介以及vue-router实现原理
    JS 数据类型、赋值、深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/jeriffe/p/3491791.html
Copyright © 2011-2022 走看看