【发布时间】:2014-10-08 13:00:47
【问题描述】:
我有以下 xml 字符串,我正在尝试根据一组动态列查询数据表。我对 xml 没有任何控制权,它是从外部源传入的。
XML:
<VmapMessage>
<MessageBody>
<ClaimId>346117125.01*BR</ClaimId>
<LastName>SMITH</LastName>
<FirstName>JOHN</FirstName>
<ClaimNumber>20222128369154</ClaimNumber>
<DOI>20131006</DOI>
<SOJ>OH</SOJ>
<EmailType>V2</EmailType>
<AdjusterName>STEPHAN WILLIAMS</AdjusterName>
<AdjusterId>TIWI</AdjusterId>
<AdjusterEmail>STEPHAN.WILLIAMS@COMP.COM</AdjusterEmail>
<SendAdjusterEmailAsHTML>T</SendAdjusterEmailAsHTML>
<AdjusterTimeZone>-8</AdjusterTimeZone>
<AdjusterDelegateName></AdjusterDelegateName>
<AdjusterDelegateId></AdjusterDelegateId>
<AdjusterDelegateEmail></AdjusterDelegateEmail>
<SendAdjusterDelegateEmailAsHTML></SendAdjusterDelegateEmailAsHTML>
<AdjusterDelegateTimeZone></AdjusterDelegateTimeZone>
<AdjusterDelegateStartDate></AdjusterDelegateStartDate>
<AdjusterDelegateEndDate></AdjusterDelegateEndDate>
<SupervisorEmail>BOB.SMITH@COMP.COM</SupervisorEmail>
<SendSupervisorEmailAsHTML>T</SendSupervisorEmailAsHTML>
<CarrierEmployee>N</CarrierEmployee>
<EncryptedSubId>232228520C6IB</EncryptedSubId>
<ChampionEmail>AMY.SMITH@COMP.COM</ChampionEmail>
<MasterCarrierInfo>
<MasterCarrierCode>COMP</MasterCarrierCode>
<CarrierName>COMP'S</CarrierName>
<VitalPointURL></VitalPointURL>
<EmployerCode>00000016</EmployerCode>
<OfficeCode>COMPREDCA</OfficeCode>
</MasterCarrierInfo>
<Details>
<Detail>
<Id>0005111*17228*DR3211</Id>
<ClaimId></ClaimId>
<RxNumber>0005073</RxNumber>
<RxDate>20140725</RxDate>
<DateEntered>20140917</DateEntered>
<FillNumber></FillNumber>
<ServiceType></ServiceType>
<NDC>72344299106</NDC>
<GPI>75100012333720</GPI>
<DrugClass>*SKELETAL MUSCLE RELAXANTS*</DrugClass>
<ServiceDescription>CYCLOBENZAPR CRE 20MG/GM</ServiceDescription>
<Quantity>60</Quantity>
<UnitOfMeasure></UnitOfMeasure>
<NumberOfRefills>0</NumberOfRefills>
<DaysSupply>30</DaysSupply>
<BillToCarrierAmount>0</BillToCarrierAmount>
<InvoiceAmount>188.77</InvoiceAmount>
<PrescriberNumber></PrescriberNumber>
<PrescriberName>SMITH, JOHN F MD</PrescriberName>
<PrescriberPhone></PrescriberPhone>
<DAW>0</DAW>
<BrandGeneric>MULTISOURCE</BrandGeneric>
<ICD9></ICD9>
<DiagnosisDesc></DiagnosisDesc>
<HCPC></HCPC>
<RejectCode>75S75</RejectCode>
<RejectReason>FM - Missing Pharmacy Telephone NumberüNDC NOT COVERED</RejectReason>
<PharmacyName>JOHN SMITH MD</PharmacyName>
<PharmacyPhysAddress1>6222 N SECOND ST</PharmacyPhysAddress1>
<PharmacyPhysAddress2></PharmacyPhysAddress2>
<PharmacyPhysCity>FRESNO</PharmacyPhysCity>
<PharmacyPhysState>CA</PharmacyPhysState>
<PharmacyPhysZip>937105446</PharmacyPhysZip>
<PharmacyPhone>9493342222</PharmacyPhone>
<StSub>0</StSub>
<Reg>0</Reg>
<MedStat>Y</MedStat>
<RegExcp>0</RegExcp>
<RejectCodes></RejectCodes>
<EmployerName>COMP'S WEST STORES, INC.</EmployerName>
<FirstBlock></FirstBlock>
<Blocks>
<Block>
<BlockCode>75*ndc</BlockCode>
<BlockReason>NDC NOT COVERED</BlockReason>
<Instance>1</Instance>
</Block>
<Block>
<BlockCode>76*ndc</BlockCode>
<BlockReason>NDC NOT KNOWN</BlockReason>
<Instance>2</Instance>
</Block>
</Blocks>
</Detail>
<Detail>
<Id>0005111*17228*DR3212</Id>
<ClaimId></ClaimId>
<RxNumber>0005074</RxNumber>
<RxDate>20140725</RxDate>
<DateEntered>20140917</DateEntered>
<FillNumber></FillNumber>
<ServiceType></ServiceType>
<NDC>72344299102</NDC>
<GPI>12345678901234</GPI>
<DrugClass>*SKELETAL MUSCLE RELAXANTS*</DrugClass>
<ServiceDescription>CYCLOBENZAPR CRE 20MG/GM</ServiceDescription>
<Quantity>60</Quantity>
<UnitOfMeasure></UnitOfMeasure>
<NumberOfRefills>0</NumberOfRefills>
<DaysSupply>30</DaysSupply>
<BillToCarrierAmount>0</BillToCarrierAmount>
<InvoiceAmount>188.77</InvoiceAmount>
<PrescriberNumber></PrescriberNumber>
<PrescriberName>SMITH, JOHN F MD</PrescriberName>
<PrescriberPhone></PrescriberPhone>
<DAW>0</DAW>
<BrandGeneric>MULTISOURCE</BrandGeneric>
<ICD9></ICD9>
<DiagnosisDesc></DiagnosisDesc>
<HCPC></HCPC>
<RejectCode>75S75</RejectCode>
<RejectReason>FM - Missing Pharmacy Telephone NumberNDC NOT COVERED</RejectReason>
<PharmacyName>JOHN SMITH MD</PharmacyName>
<PharmacyPhysAddress1>6222 N SECOND ST</PharmacyPhysAddress1>
<PharmacyPhysAddress2></PharmacyPhysAddress2>
<PharmacyPhysCity>FRESNO</PharmacyPhysCity>
<PharmacyPhysState>CA</PharmacyPhysState>
<PharmacyPhysZip>937105446</PharmacyPhysZip>
<PharmacyPhone>9493342222</PharmacyPhone>
<StSub>0</StSub>
<Reg>0</Reg>
<MedStat>Y</MedStat>
<RegExcp>0</RegExcp>
<RejectCodes></RejectCodes>
<EmployerName>COMP'S WEST STORES, INC.</EmployerName>
<FirstBlock></FirstBlock>
<Blocks>
<Block>
<BlockCode>75*ndc</BlockCode>
<BlockReason>NDC NOT COVERED</BlockReason>
<Instance>1</Instance>
</Block>
</Blocks>
</Detail>
</Details>
</MessageBody>
</VmapMessage>
输出中所需字段的动态列表(这是从数据库中读取的并且可以更改):
ParameterName ParameterPath
AdjusterEmail //MasterCarrierInfo//AdjusterEmail
EmpCode //MasterCarrierInfo//EmployerCode
SOJ //MessageBody//SOJ
DOI //MessageBody//DOI
GPI //MessageBody//Details//Detail//GPI
BlockCode //MessageBody//Details//Detail//Blocks//Block//BlockCode
我需要将其读入如下所示的表格中:
AdjusterEmail EmpCode SOJ DOI GPI BlockCode
STEPHAN.WILLIAMS@example.COM 00000016 OH 20131006 75100012333720 75*ndc
STEPHAN.WILLIAMS@example.COM 00000016 OH 20131006 75100012333720 76*ndc
STEPHAN.WILLIAMS@example.COM 00000016 OH 20131006 12345678901234 75*ndc
每个 MessageBody 可以有多个详细记录,每个 Detail 可以有多个 Block 记录
我真的不知道从哪里开始,我尝试了很多不同的东西,包括 linq(我不知道)并且无法弄清楚......
【问题讨论】:
-
尝试按照以下步骤使用:stackoverflow.com/questions/3458566/…
-
您可以将整个 XML blob 作为 SQL Server 中的 XML 字段传递给它,然后使用 XQuery 从传入的 XML 变量中进行选择,并使用该选择语句在表中插入适当的值:@ 987654322@
-
@Jonathan Fields 你解决了吗?
-
还没解决,下面的解决方案只是带回一条记录。每个消息体可以有多个详细信息,每个详细信息可以有多个块。请参阅上面更新的 xml 和更新的输出。