Как получить несколько дочерних XML-узлов внутри одного родительского узла вместо повторения родительского узла для каждого дочернего узла? - PullRequest
1 голос
/ 30 января 2010

Я пытаюсь создать действительный XML для документа HL7 CDA из SQL Server 2008, используя FOR XML.У меня проблемы с синтаксисом, чтобы получить несколько дочерних элементов внутри узла вместо повторения узла для каждого дочернего элемента.

/* Expected output:
<!-- 
********************************************************
  Past Medical History section
********************************************************
-->
    <component>
        <section>
            <code code="10153-2" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"/>
            <title>Past Medical History</title>
            <text>
                <list>
                    <item>COPD - 1998</item>
                    <item>Dehydration: 2001</item>
                    <item>Myocardial infarction: 2003</item>
                </list>
            </text>
        </section>
    </component>
*/

SELECT      '
   ********************************************************
     Past Medical History section
   ********************************************************
   ' As "comment()",
            '10153-2' AS [section/code/@code], 
            '2.16.840.1.113883.6.1' AS [section/code/@codeSystem], 
            'LOINC' AS [section/code/@codeSystemName], 
            'Past Medical History' AS [section/title],
            (SELECT     [Incident] + ' - ' + [IncidentYear] as [item]
             FROM       [tblSummaryPastMedicalHistory] AS PMH
             WHERE      ([PMH].[Incident] IS NOT NULL) 
                               AND      ([PMH].[PtUnitNum] = [PatientEncounter].[PtUnitNum])
             FOR XML PATH('list'), TYPE
            ) as [section/text]
FROM         tblPatientEncounter AS PatientEncounter
WHERE     (PatientEncounterNumber = 54)
FOR XML PATH('component'), TYPE

Вместо получения структуры

<text>
  <list>
    <item>blah</item>
    <item>blah2</item>
  </list>
</text> 

из ожидаемоговывод:

<text>
  <list>
    <item>blah</item>
  </list>
  <list>
    <item>blah2</item>
  </list>
</text> 

Может кто-нибудь объяснить, как отформатировать FOR XML, чтобы получить несколько дочерних элементов внутри узла?

1 Ответ

2 голосов
/ 30 января 2010

понял это ...

Вместо:

FOR XML PATH('list'), TYPE) as [section/text] 

Изменено на:

FOR XML PATH(''), TYPE) as [list/section/text] 

Надеюсь, это поможет кому-то еще в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...