我们必须用tsql解析一些字符串
这是我想要标记为键值对标记的字符串
<parameters>SearchName="Flat " SearchFormTemplateId="Search" SearchFormInfo=":ID_.Modules.Business.SearchModule.Label.SearchType.RE.Residential:LDSBL_15 km%15,10 km%10,5 km%5,20 km%20:LSTG_3,2,4:DR_3572ad9b-44cb-4229-a512-3037562d7cc7" SubTypeGroupId="3,2,4" InterfaceLocation="3.5908783699254903"§ CountryId="446931c9-7efe-440d-b674-24b8659087a7" Month="2000" AdMaterialTransactionTypeId="RE"/><azmi/></parameters>
<parameters>SearchName="Apartment and.. " CountryID="446931C9-7EFE-440D-B674-24B8659087A7" DefaultRegionID="446931C9-7EFE-440D-B674-24B8659087A7" CurrencyID="USD" LocationID="5A7FCB90-6247-44FD-AB2E-61FEABEA1246,AFAC41AE-0877-45E1-BAA6-1846E9D92332,CCB35927-94CE-4F41-B4BA-695A0396DC5A,B93B2C1F-460A-4726-8B51-FFBEFC15C810,4E701DB8-6B3B-4C0E-91FB-352BEF05FB40,9FA7B3DA-9D36-4742-8526-5143F01E6089,384AF508-D5DC-4ED1-93D2-635180447A8D,49B571CC-FC2E-40F0-A5A7-722D6D1F5926,B0CA4856-427B-4C93-A085-95FA36C082B8,3590075E-9A63-4AF5-BE88-9C8BB70BACB7,E1283086-8C38-4A97-B858-ABE5940F2986,78060DDC-3F00-4AF0-AD17-AC0007FE0622,FE815C24-94D5-4107-989D-B0F5FB5280E8,356F506E-09C1-4E1E-B54E-C54E80E502DF,F028F134-4C13-491B-846C-D85B4D979A5F,7E4013DB-2DE3-401B-9AFF-F41C16B12DB4,5C59BC43-63B7-45D5-8963-F916A71ED889,DA8D9F2D-1C43-443A-86C7-F9661FF06830" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3,4" MMAX="2100" MoMin="1500" NumberOfRoomsMin="3" InterfaceLocation="1"</parameters>
<parameters>SearchName="Apartment" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="SE" PropertySubTypeGroupID="4" MMIN="100000" SearchBy="ByLocality" InterfaceLocation="1" LocationID="09194e31-1b5e-482b-9775-41886a1d1167" /><Keyid="6f4037e2-69ba-402d-a8ac-286b04e2bf3b"</parameters>
<parameters>SearchName="Location, 3 rooms" CurrencyID="USD" LocationID="f5812b35-e952-4e3e-a3f1-b0d678616826" TransactionTypeID="RE" PropertySubTypeGroupID="2,3" MMAX="2500" NumberOfRoomsMin="3" SurfaceLivibleMin="80" SearchBy="WithoutGeo" InterfaceLocation="2" /><Keyid="079bb71a-8f01-42fd-a956-0be2239be0ef"</parameters>
<parameters>SearchName="Flat..." DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3" MMAX="4050" MoMin="2700" NumberOfRoomsMin="4.0" SearchBy="ByLocality" InterfaceLocation="1" LocationID="e22c7349-fd77-407a-88a4-bd39a105b986" /><Keyid="44e05bf1-8a26-48b6-b12b-5a652d586d78"</parameters>
<parameters>SearchName="Apartment -" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="4" MoMin="500" SearchBy="ByLocality" InterfaceLocation="1" LocationID="e7148138-5be1-46c5-98b1-5ca2edeeb9da" /><Keyid="37ad0ed5-1800-417b-8e17-9ff5084086a2"</parameters>
<parameters>SearchName="Rent dsfsd" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="4" SearchBy="WithoutGeo" /><Keyid="d695f924-6ce6-405b-a561-fa3269f41221"</parameters>
<parameters>SearchName="Apartement ..." DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" AreaID="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" TransactionTypeID="RE" PropertySubTypeGroupID="3,2,4" MMAX="1500" LocationIdAgregate="" AreaIdAgregate="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" StateIdAgregate="1D6E6621-3179-4D54-A9D8-89E6F438FF3B,8C79C6B5-B61A-45F9-8560-91AE4825AC6A" InterfaceAreaIdAgregate="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" SearchBy="ByRegion" /><Keyid="37ad0ed5-1800-417b-8e17-9ff5084086a2"</parameters>
<parameters>SearchName="Apartment a" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" AreaID="49401e55-95c1-42cb-9242-9468707e7d8a" TransactionTypeID="SE" PropertySubTypeGroupID="16" AreaIdAgregate="49401e55-95c1-42cb-9242-9468707e7d8a" StateIdAgregate="97F9F29F-149E-4E53-A470-96CC8499A64B" SearchBy="ByRegion" /><Keyid="39fb945c-b048-4942-be86-17f692539ba3"</parameters>
<parameters>SearchName="Apartment, Location, 5 rooms" CountryID="446931C9-7EFE-440D-B674-24B8659087A7" DefaultRegionID="446931C9-7EFE-440D-B674-24B8659087A7" CurrencyID="USD" LocationID="E22C7349-FD77-407A-88A4-BD39A105B986" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3,4" NumberOfRoomsMin="5" InterfaceLocation="5"</parameters>
<parameters>SearchName="Apartment" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="SE" PropertySubTypeGroupID="16" SearchBy="ByLocality" InterfaceLocation="5" LocationID="184e17b3-9d27-46fd-8a19-a9f402dfe680" /><Keyid="39fb945c-b048-4942-be86-17f692539ba3"</parameters>
它不是真正的xml 键和值类似于key =“value”
最后有些垃圾角色对我来说,有趣的部分来自searchname =“..” 直到以下/&gt;
使用xml节点它不会与正则表达式一起工作 有什么建议吗?
由于
答案 0 :(得分:0)
也许这可以帮助
Declare @String varchar(max) ='
<parameters>SearchName="Flat " SearchFormTemplateId="Search" SearchFormInfo=":ID_.Modules.Business.SearchModule.Label.SearchType.RE.Residential:LDSBL_15 km%15,10 km%10,5 km%5,20 km%20:LSTG_3,2,4:DR_3572ad9b-44cb-4229-a512-3037562d7cc7" SubTypeGroupId="3,2,4" InterfaceLocation="3.5908783699254903"§ CountryId="446931c9-7efe-440d-b674-24b8659087a7" Month="2000" AdMaterialTransactionTypeId="RE"/><azmi/></parameters>
<parameters>SearchName="Apartment and.. " CountryID="446931C9-7EFE-440D-B674-24B8659087A7" DefaultRegionID="446931C9-7EFE-440D-B674-24B8659087A7" CurrencyID="USD" LocationID="5A7FCB90-6247-44FD-AB2E-61FEABEA1246,AFAC41AE-0877-45E1-BAA6-1846E9D92332,CCB35927-94CE-4F41-B4BA-695A0396DC5A,B93B2C1F-460A-4726-8B51-FFBEFC15C810,4E701DB8-6B3B-4C0E-91FB-352BEF05FB40,9FA7B3DA-9D36-4742-8526-5143F01E6089,384AF508-D5DC-4ED1-93D2-635180447A8D,49B571CC-FC2E-40F0-A5A7-722D6D1F5926,B0CA4856-427B-4C93-A085-95FA36C082B8,3590075E-9A63-4AF5-BE88-9C8BB70BACB7,E1283086-8C38-4A97-B858-ABE5940F2986,78060DDC-3F00-4AF0-AD17-AC0007FE0622,FE815C24-94D5-4107-989D-B0F5FB5280E8,356F506E-09C1-4E1E-B54E-C54E80E502DF,F028F134-4C13-491B-846C-D85B4D979A5F,7E4013DB-2DE3-401B-9AFF-F41C16B12DB4,5C59BC43-63B7-45D5-8963-F916A71ED889,DA8D9F2D-1C43-443A-86C7-F9661FF06830" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3,4" MMAX="2100" MoMin="1500" NumberOfRoomsMin="3" InterfaceLocation="1"</parameters>
<parameters>SearchName="Apartment" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="SE" PropertySubTypeGroupID="4" MMIN="100000" SearchBy="ByLocality" InterfaceLocation="1" LocationID="09194e31-1b5e-482b-9775-41886a1d1167" /><Keyid="6f4037e2-69ba-402d-a8ac-286b04e2bf3b"</parameters>
<parameters>SearchName="Location, 3 rooms" CurrencyID="USD" LocationID="f5812b35-e952-4e3e-a3f1-b0d678616826" TransactionTypeID="RE" PropertySubTypeGroupID="2,3" MMAX="2500" NumberOfRoomsMin="3" SurfaceLivibleMin="80" SearchBy="WithoutGeo" InterfaceLocation="2" /><Keyid="079bb71a-8f01-42fd-a956-0be2239be0ef"</parameters>
<parameters>SearchName="Flat..." DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3" MMAX="4050" MoMin="2700" NumberOfRoomsMin="4.0" SearchBy="ByLocality" InterfaceLocation="1" LocationID="e22c7349-fd77-407a-88a4-bd39a105b986" /><Keyid="44e05bf1-8a26-48b6-b12b-5a652d586d78"</parameters>
<parameters>SearchName="Apartment -" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="4" MoMin="500" SearchBy="ByLocality" InterfaceLocation="1" LocationID="e7148138-5be1-46c5-98b1-5ca2edeeb9da" /><Keyid="37ad0ed5-1800-417b-8e17-9ff5084086a2"</parameters>
<parameters>SearchName="Rent dsfsd" CurrencyID="USD" TransactionTypeID="RE" PropertySubTypeGroupID="4" SearchBy="WithoutGeo" /><Keyid="d695f924-6ce6-405b-a561-fa3269f41221"</parameters>
<parameters>SearchName="Apartement ..." DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" AreaID="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" TransactionTypeID="RE" PropertySubTypeGroupID="3,2,4" MMAX="1500" LocationIdAgregate="" AreaIdAgregate="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" StateIdAgregate="1D6E6621-3179-4D54-A9D8-89E6F438FF3B,8C79C6B5-B61A-45F9-8560-91AE4825AC6A" InterfaceAreaIdAgregate="e90f1e83-ce84-46b6-826a-3775ffd2815d,dc2c2435-b773-424f-a279-4141efd21b78,ce142f26-2b08-419d-86a2-943bea72b279,b5749fe2-9360-48c0-8ffc-f6c9a343f2fa,a3a559c2-4c7e-4b4c-8314-335e9e655472,c3cd7728-3e6a-4787-959f-8e9e824b02d0" SearchBy="ByRegion" /><Keyid="37ad0ed5-1800-417b-8e17-9ff5084086a2"</parameters>
<parameters>SearchName="Apartment a" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" AreaID="49401e55-95c1-42cb-9242-9468707e7d8a" TransactionTypeID="SE" PropertySubTypeGroupID="16" AreaIdAgregate="49401e55-95c1-42cb-9242-9468707e7d8a" StateIdAgregate="97F9F29F-149E-4E53-A470-96CC8499A64B" SearchBy="ByRegion" /><Keyid="39fb945c-b048-4942-be86-17f692539ba3"</parameters>
<parameters>SearchName="Apartment, Location, 5 rooms" CountryID="446931C9-7EFE-440D-B674-24B8659087A7" DefaultRegionID="446931C9-7EFE-440D-B674-24B8659087A7" CurrencyID="USD" LocationID="E22C7349-FD77-407A-88A4-BD39A105B986" TransactionTypeID="RE" PropertySubTypeGroupID="1,2,3,4" NumberOfRoomsMin="5" InterfaceLocation="5"</parameters>
<parameters>SearchName="Apartment" DefaultRegionID="446931c9-7efe-440d-b674-24b8659087a7" CurrencyID="USD" TransactionTypeID="SE" PropertySubTypeGroupID="16" SearchBy="ByLocality" InterfaceLocation="5" LocationID="184e17b3-9d27-46fd-8a19-a9f402dfe680" /><Keyid="39fb945c-b048-4942-be86-17f692539ba3"</parameters>
'
Declare @Map table (MapSeq int,MapFrom varchar(50),MapTo varchar(50))
Insert Into @Map values
(1,'<parameters>',' '),
(1,'</parameters>','||'),
(2,'</',' '),
(2,'<',' '),
(2,'>',' '),
(2,'/',' '),
(9,'azmi',''), -- Caused and Exception First Row: ...RE"/><azmi/></parameters>
(9,'§','') -- Caused and Exception First Row: value outside a quoted attribute value
Select @String = Replace(@String,MapFrom,MapTo) From @Map
Declare @NewString varchar(max) ='';Select @NewString = @NewString + NewString from (Select NewString='<row id="'+cast(Key_PS as varchar(25))+'" '+Key_Value+' />' from [dbo].[udf-Str-Parse](@String,'||') Where Key_Value <>'') A
Declare @XML xml = cast(@NewString as XML)
Select ID = r.value('@id','int')
,Item = Attr.value('local-name(.)','varchar(100)')
,Value = Attr.value('.','varchar(max)')
From @XML.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*[local-name(.)!="id"]') as B(Attr)
返回
ID Item Value
1 SearchName Flat
1 SearchFormTemplateId Search
1 SearchFormInfo :ID_.Modules.Business.SearchModule.Label.SearchType.RE.Residential:LDSBL_15 km%15,10 km%10,5 km%5,20 km%20:LSTG_3,2,4:DR_3572ad9b-44cb-4229-a512-3037562d7cc7
1 SubTypeGroupId 3,2,4
1 InterfaceLocation 3.5908783699254903
1 CountryId 446931c9-7efe-440d-b674-24b8659087a7
1 Month 2000
1 AdMaterialTransactionTypeId RE
2 SearchName Apartment and..
2 CountryID 446931C9-7EFE-440D-B674-24B8659087A7
2 DefaultRegionID 446931C9-7EFE-440D-B674-24B8659087A7
2 CurrencyID USD
...
11 SearchName Apartment
11 DefaultRegionID 446931c9-7efe-440d-b674-24b8659087a7
11 CurrencyID USD
11 TransactionTypeID SE
11 PropertySubTypeGroupID 16
11 SearchBy ByLocality
11 InterfaceLocation 5
11 LocationID 184e17b3-9d27-46fd-8a19-a9f402dfe680
11 Keyid 39fb945c-b048-4942-be86-17f692539ba3
UDF Parser
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10))
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
-- Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max))
As
Begin
Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML)
Insert Into @ReturnTable Select ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String)
Return
End