2016-02-05 43 views
0

我已经在一个表中的列下面的XML结构的XML:解析值了使用MSSQL

<font class="nav"> 
    <a onMouseOver="ShowMenu(event, '107349267', 'yes', '431539056')" href="#" onMouseout="delayhidemenu()"> 
    <b>107349267</b> 
    </a> 
</font> 

我舒服解析最父子节点,但我没有看到我怎么可以:

SELECT 
    cast(TransactionId as xml).value('(/font class//b/node())[1]',  'nvarchar(max)') as TransId 
    FROM dbo.TableA 

有帮助吗?

+0

想通了这一点: – user130045

回答

0

想通了这一点:

CREATE FUNCTION [dbo].[ParseHTMLFromString] 
(
@HTML_STRING VARCHAR(MAX) -- Variable for string 
) 
RETURNS VARCHAR(MAX) 
BEGIN 

DECLARE @STRING VARCHAR(MAX) 
Declare @Xml AS XML 
SET @Xml = CAST(('<A>'+ REPLACE(REPLACE(REPLACE(REPLACE(@HTML_STRING 
    ,'<','@*'),'>','!'),'@','</A><A>'),'!','</A><A>') +'</A>') AS XML) 

;WITH CTE AS (SELECT A.value('.', 'VARCHAR(MAX)') [A] 
    FROM @Xml.nodes('A') AS FN(A) WHERE CHARINDEX('*', 
    A.value('.', 'VARCHAR(MAX)'))=0 
    AND ISNULL(A.value('.', 'varchar(max)'),'')<>'') 

SELECT @STRING=STUFF((SELECT ' ' + [A] FROM CTE FOR XML PATH('')),1,1,'') 
RETURN @STRING 
END