繁体   English   中英

如何才能从SQL Server动态检索XML节点并使用XDocument使用它们从模板中构建文件?

[英]How can I retrieve XML nodes dynamically from SQL Server and use XDocument to build a file from a template with them?

我有一个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 ... FOR XML

例如:

USE ADVENTUREWORKS
SELECT TOP 2 * FROM HUMANRESOURCES.EMPLOYEE FOR XML PATH

这将返回结果集为以下XML。 使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM