Biztalk:嵌套平面文件架构

时间:2015-12-28 21:02:49

标签: xml mapping schema biztalk

I have these two tables that I wish to create a nested XML schema out of

我希望架构看起来像:

<PERSON ID="1" FN="F1" LN="L1">
  <DETAIL ID="1" NUM="11"/>
  <DETAIL ID="1" NUM="12"/>
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
  <DETAIL ID="1" NUM="21"/>
  <DETAIL ID="1" NUM="22"/>
  <DETAIL ID="1" NUM="23"/>
</PERSON>

我调用一些SQL来从表中获取数据。 我尝试过的一种方法是在“ID”字段上使用内部联接,另一种方法是使用存储过程返回两组数据,每个表一个。我在两个方面遇到的问题是如何将其映射到上述结构?

我最终获得每条PERSON记录一条详细记录(PERSON重复) 或者我获得每个PERSON记录的所有详细记录(ID不再匹配)。

2 个答案:

答案 0 :(得分:1)

使用FOR XML AUTO:

SELECT PERSON.ID, PERSON.FN, PERSON.LN, DETAIL.ID, DETAIL.NUM
FROM PERSON
JOIN DETAIL ON PERSON.ID = DETAIL.ID
FOR XML AUTO

使用FOR XML PATH:

SELECT p.ID '@ID', p.FN '@FN', p.LN '@LN', 
    (
        SELECT d.ID '@ID', d.NUM '@NUM'
        FROM DETAIL d
        WHERE p.ID = d.ID
        FOR XML PATH('DETAIL'), TYPE
    )
FROM PERSON p
FOR XML PATH('PERSON')

两者都会产生这个:

<PERSON ID="1" FN="F1" LN="L1">
  <DETAIL ID="1" NUM="11" />
  <DETAIL ID="1" NUM="12" />
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
  <DETAIL ID="2" NUM="21" />
  <DETAIL ID="2" NUM="22" />
  <DETAIL ID="2" NUM="23" />
</PERSON>

答案 1 :(得分:0)

如果你试试这个sql:

SELECT
ID AS '@ID',
FN AS '@FN',
LN AS '@LN',
(
SELECT ID AS '@ID', NUM AS '@NUM' FROM Table_2 WHERE table_2.ID = dbo.Table_1.ID FOR XML PATH('DETAIL') ,TYPE 
) AS 'details'
FROM dbo.Table_1
FOR XML PATH('PERSON')

您将获得如下所示的一些xml内容:

<PERSON ID="1" FN="F1" LN="L1">
  <details>
    <DETAIL ID="1" NUM="11" />
    <DETAIL ID="1" NUM="12" />
  </details>
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
  <details>
    <DETAIL ID="2" NUM="21" />
    <DETAIL ID="2" NUM="22" />
    <DETAIL ID="2" NUM="23" />
  </details>
</PERSON>