有XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<GMQSTD:ProcessGMQData xsi:schemaLocation="http://www.gm.com/ns/GMQ/GMQMessageStandard GMQSchemaHeaders.xsd" xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" xmlns="http://www.gm.com/ns/GMQ/GMQSchemaExtensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <GMQSTD:ApplicationArea>
       <GMQSTD:GMQHeader>
      <releaseID>  </releaseID>
       </GMQSTD:GMQHeader>
  </GMQSTD:ApplicationArea>
</GMQSTD:ProcessGMQData>
想读取releaseID
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlfile, '<root xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" />' SELECT *
FROM OPENXML(@docHandle, ’/GMQSTD:ProcessGMQData/GMQSTD:ApplicationArea/GMQSTD:GMQHeader‘, 2)
WITH (releaseID  varchar(50)   ‘releaseID')EXEC sp_xml_removedocument @docHandle
死活读不出来。 换了好几种方式,对这种带命名空间的节点下又有不带命名空间的xml读取实在棘手啊。那位有解决方案,不吝赐教啊!谢啦!

解决方案 »

  1.   

    DECLARE @xmlfile varchar(8000);
    SET @xmlfile='
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <GMQSTD:ProcessGMQData xsi:schemaLocation="http://www.gm.com/ns/GMQ/GMQMessageStandard GMQSchemaHeaders.xsd" 
       xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" 
       xmlns="http://www.gm.com/ns/GMQ/GMQSchemaExtensions" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <GMQSTD:ApplicationArea>
          <GMQSTD:GMQHeader>
              <releaseID> bb</releaseID>
          </GMQSTD:GMQHeader>
      </GMQSTD:ApplicationArea></GMQSTD:ProcessGMQData>'declare @docHandle INT;
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlfile, '<root xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" />'  SELECT *
    FROM OPENXML(@docHandle, '/GMQSTD:ProcessGMQData/GMQSTD:ApplicationArea/GMQSTD:GMQHeader',3)
    WITH (releaseID varchar(10) '.')EXEC sp_xml_removedocument @docHandle
      

  2.   

    分给啦,好用。不过我自己也找到一个方法。
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlfile, '<root xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" />' 加上   EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlfile, '<root xmlns:GMQSTD="http://www.gm.com/ns/GMQ/GMQMessageStandard" /> xmlns mylns="http://www.gm.com/ns/GMQ/GMQSchemaExtensions" '. 
     
    FROM OPENXML(@docHandle, ’/GMQSTD:ProcessGMQData/GMQSTD:ApplicationArea/GMQSTD:GMQHeader‘, 2)
    WITH (releaseID varchar(50) ‘mylns:releaseID')
    也能取到了。:) 谢啦!