【问题标题】:Generate BOD OAGIS XML from SQL Server从 SQL Server 生成 BOD OAGIS XML
【发布时间】:2018-06-21 03:51:09
【问题描述】:

我需要从 SQL Server 生成一个符合 BOD OAGIS schema 的 XML 文档。

我有部分解决方案,但没有得到我需要的确切格式。

这是我的查询:

SELECT
(
  SELECT Customer As 'SalesOrderHeader/CustomerParty/ID',  
  (
    SELECT LinesNo As 'LineNumber'
      FROM LinesInterfaccia 
      WHERE HeaderInterfaccia.OrderNo = LinesInterfaccia.OrderNo  
      FOR XML path('salesline'), TYPE
  )
  FROM HeaderInterfaccia
  FOR XML path('salesorder'), type
).query('for $i in /salesorder return <DataArea>{$i}</DataArea>'); 

这是我的结果:

<DataArea>
  <salesorder>
    <SalesOrderHeader>
      <CustomerParty>
        <ID>BP00003184</ID>
      </CustomerParty>
    </SalesOrderHeader>
    <salesline>
      <LineNumber>10</LineNumber>
    </salesline>
    <salesline>
      <LineNumber>20</LineNumber>
    </salesline>
  </salesorder>
</DataArea>
<DataArea>
  <salesorder>
    <SalesOrderHeader>
      <CustomerParty>
        <ID>BP00003184</ID>
      </CustomerParty>
    </SalesOrderHeader>
    <salesline>
      <LineNumber>10</LineNumber>
    </salesline>
  </salesorder>
</DataArea>

但我需要这种格式:

<DataArea>
   <Process>tenant</Process>

  <salesorder>
    <SalesOrderHeader>
      <CustomerParty>
        <ID>BP00003184</ID>
      </CustomerParty>
    </SalesOrderHeader>
    <salesline>
      <LineNumber>10</LineNumber>
    </salesline>
    <salesline>
      <LineNumber>20</LineNumber>
    </salesline>
  </salesorder>
</DataArea>
<DataArea>
    <Process>tenant</Process>
  <salesorder>
    <SalesOrderHeader>
      <CustomerParty>
        <ID>BP00003184</ID>
      </CustomerParty>
    </SalesOrderHeader>
    <salesline>
      <LineNumber>10</LineNumber>
    </salesline>
  </salesorder>
</DataArea>

我也试过了:

SELECT  
(
  SELECT 'tenant' as 'Process',
    Customer As 'SalesOrderHeader/CustomerParty/ID',  
    (select LinesNo  as 'LineNumber/no'

结果:

<DataArea>
  <salesorder>
    <Process>tenant</Process>
    <SalesOrderHeader>

我的预期结构是:

<DataArea>
   <Process>
   </Process>
     <SalesOrder>
        <SalesLine>
        </Salesline>
        <SalesLine>
        </Salesline>

     </salesOrder>
</DataArea>

【问题讨论】:

    标签: sql-server xml schema


    【解决方案1】:

    试试这样:

    DECLARE @tblOrder TABLE(OrderID INT IDENTITY, CustomerID VARCHAR(100));
    INSERT INTO @tblOrder VALUES('BP00003184')
                               ,('One More');
    
    DECLARE @tblOrderLine TABLE(OrderLineID INT IDENTITY, OrderID INT, LineNumber INT);
    INSERT INTO @tblOrderLine VALUES(1,10),(1,20)
                                   ,(2,22),(2,33);
    
    SELECT 'tenant' AS Process
          ,o.CustomerID AS [salesorder/SalesOrderHeader/CustomerParty/ID]
          ,(
            SELECT LineNumber
            FROM @tblOrderLine AS ol 
            WHERE ol.OrderID=o.OrderID
            FOR XML PATH('salesline'),TYPE
           ) AS salesorder
    FROM @tblOrder AS o
    FOR XML PATH('DataArea');
    

    此结构缺少根元素,即 - 根据定义无效的 XML。 SQL Server 对此没有问题,但其他引擎可能有...

    你可以这样想这个过程:

    • 向下选择的列
    • 哦,有一个新的XPath进程),让我们打开一个新标签
    • 哦,下一个是新的,关闭/Process
    • 呃,好大(salesorder/SalesOrderHeader/CustomerParty/ID),打开吧!
    • 啊,这本身就是一个 XML。它将被称为salesorder。好的! 仍在营业
    • 好的,我找到了FROM,让我们关闭当前的XPath

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多