如何从SQL Server动态检索XML节点,并使用XDocument从模板构建带有它们的文件?
本文关键字:构建 文件 XDocument 动态 Server SQL 检索 XML 节点 | 更新日期: 2023-09-27 18:15:10
我有一个XML模板与所有我需要的标题。我用XDocument
加载它,然后用XElements
构建节点。然而,这意味着我目前正在硬编码我需要进入我的文件的数据位。
我注意到SQL Server我可以使用XML
数据类型在数据库中存储数据。使用这种方法,最好查看每个记录并动态构建XML
文件。
然而,我发现我的方法存在一些问题。可能有两个节点共享相同的父节点。是否有一种方法来存储节点和它们的父节点,并使用XDocument
中的东西来合并它们?
这是我的XML
的一个示例块<AddInfoCollection>
<AddInfo>
<Key>TransportReference</Key>
<Value>666777888</Value>
</AddInfo>
<AddInfo>
<Key>UI_NKCarrierSCAC</Key>
<Value>ABCD</Value>
</AddInfo>
<AddInfo>
<Key>SchDLoading</Key>
<Value>1234</Value>
</AddInfo>
<AddInfo>
<Key>SchDArrival</Key>
<Value>12345</Value>
</AddInfo>
</AddInfoCollection>
在数据库中,我想象表将是:
-
Field (varchar(200)
-
Value (varchar(200)
-
XML
Field Value XML
----------------------------------------------------------------
TransportReference 666777888 <AddInfoCollection>
<AddInfo>
<Key>TransportReference</Key>
<Value>666777888</Value>
</AddInfo>
<AddInfoCollection>
使用SELECT…为XML。
例如:USE ADVENTUREWORKS
SELECT TOP 2 * FROM HUMANRESOURCES.EMPLOYEE FOR XML PATH
返回结果集如下所示。使用SELECT…的其他变体FOR XML使XML适合您的需求。
<row>
<EmployeeID>1</EmployeeID>
<NationalIDNumber>14417807</NationalIDNumber>
<ContactID>1209</ContactID>
<LoginID>adventure-works'guy1</LoginID>
<ManagerID>16</ManagerID>
<Title>Production Technician - WC60</Title>
<BirthDate>1972-05-15T00:00:00</BirthDate>
<MaritalStatus>M</MaritalStatus>
<Gender>M</Gender>
<HireDate>1996-07-31T00:00:00</HireDate>
<SalariedFlag>0</SalariedFlag>
<VacationHours>21</VacationHours>
<SickLeaveHours>30</SickLeaveHours>
<CurrentFlag>1</CurrentFlag>
<rowguid>AAE1D04A-C237-4974-B4D5-935247737718</rowguid>
<ModifiedDate>2004-07-31T00:00:00</ModifiedDate>
</row>
<row>
<EmployeeID>2</EmployeeID>
<NationalIDNumber>253022876</NationalIDNumber>
<ContactID>1030</ContactID>
<LoginID>adventure-works'kevin0</LoginID>
<ManagerID>6</ManagerID>
<Title>Marketing Assistant</Title>
<BirthDate>1977-06-03T00:00:00</BirthDate>
<MaritalStatus>S</MaritalStatus>
<Gender>M</Gender>
<HireDate>1997-02-26T00:00:00</HireDate>
<SalariedFlag>0</SalariedFlag>
<VacationHours>42</VacationHours>
<SickLeaveHours>41</SickLeaveHours>
<CurrentFlag>1</CurrentFlag>
<rowguid>1B480240-95C0-410F-A717-EB29943C8886</rowguid>
<ModifiedDate>2004-07-31T00:00:00</ModifiedDate>
</row>