将带有嵌套节点的 xml 导入 Access(并需要将 xml 转换为带有 xsl 的 'flat' 结构)

Importing xml with nested nodes into Access (and needing to transform the xml into a 'flat' structure with xsl)

拼命尝试将一些数据导入到 Access 中,但失败了,这些数据由各种嵌套节点组成,导入时被放入单独的 table 中,而我只希望拥有一个。

我只是想让 Activity table 和嵌套节点中的所有数据都在这个父 table.

我试过调整以前类似问题的一些代码,但我的尝试似乎没有希望,因为它甚至没有从 'Activity' table 中提取任何信息,但是它创建了 [= 'CstActivity' table 中的 61=] 字段,我想我最终可以达到目的,以便在 table 之间进行连接/link。唯一的问题是它实际上并没有用相关的 ID 填充它!

但理想情况下,我只想转换数据,以便导入仅包含 'Activity' 节点上相关行中嵌套节点中的所有内容。

xml待导入:


<?xml version="1.0" encoding="utf-8"?>
<ns:HCDSExtract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819">
  <ns:MessageHeader>
    <ns:OrgSubmittingID>RRK</ns:OrgSubmittingID>
    <ns:FinYr>FY2018-19</ns:FinYr>
    <ns:PeriodStartDate>2018-05-01</ns:PeriodStartDate>
    <ns:PeriodEndDate>2018-05-31</ns:PeriodEndDate>
    <ns:CreateDateTime>2018-03-28T18:25:04</ns:CreateDateTime>
    <ns:FeedType>OP</ns:FeedType>
    <ns:NoOfActivityRecords>10</ns:NoOfActivityRecords>
    <ns:TotalCosts>100.000</ns:TotalCosts>
  </ns:MessageHeader>
  <ns:MessageBody>
    <ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503898066984</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>01</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503898066984</ns:AttID>
      <ns:HRG>WF01A</ns:HRG>
      <ns:AppDte>2018-05-11T14:29:00</ns:AppDte>
      <ns:Tfc>172</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true" />
      <ns:PatOrgId xsi:nil="true" />
      <ns:CstActivity>
        <ns:ActCstID>OUT001</ns:ActCstID>
        <ns:ActCnt>1440</ns:ActCnt>
        <ns:Resource>
          <ns:ResCstID>CPF005</ns:ResCstID>
          <ns:TotCst>10.00000000</ns:TotCst>
        </ns:Resource>
      </ns:CstActivity>
    </ns:Activity>
</ns:MessageBody>
</ns:HCDSExtract>

我的 xsl 文件:

<xsl:stylesheet version="1.0" xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <dataroot>
            <xsl:apply-templates select="@*|node()"/>
        </dataroot>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ns:Activity">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:template>

    <xsl:template match="ns:CstActivity">
        <ns:CstActivity>
            <ns:AttID><xsl:value-of select="../ns:AttID"/></ns:AttID>
            <xsl:apply-templates select="@*|node()"/>
        </ns:CstActivity>
    </xsl:template>

</xsl:stylesheet>

任何帮助将不胜感激。提前谢谢你。

编辑:

我的新 xsl 如下:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819">

      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

<xsl:template match="ns:CstActivity"><xsl:apply-templates /></xsl:template>



<xsl:template match="ns:Resource"><xsl:apply-templates /></xsl:template>



    </xsl:stylesheet>

所以我最新的 xsl 给出了如下输出:

    <ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897890061</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>02</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897890061</ns:AttID>
      <ns:HRG>WF01A</ns:HRG>
      <ns:AppDte>2018-05-28T17:14:00</ns:AppDte>
      <ns:Tfc>306</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>

        <ns:ActCstID>DIM007</ns:ActCstID>
        <ns:ActCnt>3</ns:ActCnt>

          <ns:ResCstID>CPF002</ns:ResCstID>
          <ns:TotCst>10.00000000</ns:TotCst>

这很好,但是对于部分

        <ns:ActCstID>DIM007</ns:ActCstID>
        <ns:ActCnt>3</ns:ActCnt>

          <ns:ResCstID>CPF002</ns:ResCstID>
          <ns:TotCst>10.00000000</ns:TotCst>

父节点中的每个条目可能有很多这 4 位信息....我希望父节点中的每个相关记录对每个不同的子节点重复。我希望这是有道理的。

如此多的期望输出 xml 将是:

   <ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897890061</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>02</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897890061</ns:AttID>
      <ns:HRG>WF01A</ns:HRG>
      <ns:AppDte>2018-05-28T17:14:00</ns:AppDte>
      <ns:Tfc>306</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>
      <ns:ActCstID>DIM007</ns:ActCstID>
      <ns:ActCnt>3</ns:ActCnt>
      <ns:ResCstID>CPF002</ns:ResCstID>
      <ns:TotCst>10.00000000</ns:TotCst>
 </ns:Activity>
<ns:Activity>
 <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897890061</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>02</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897890061</ns:AttID>
      <ns:HRG>WF01A</ns:HRG>
      <ns:AppDte>2018-05-28T17:14:00</ns:AppDte>
      <ns:Tfc>306</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>
      <ns:ActCstID>MID127</ns:ActCstID>
      <ns:ActCnt>2</ns:ActCnt>
      <ns:ResCstID>CPD060</ns:ResCstID>
      <ns:TotCst>12.05000000</ns:TotCst>
</ns:Activity>

非常感谢任何帮助!

最新编辑以概述希望的输出。很抱歉,我可能没有给出一个很好的示例输入 xml 来解决问题,但希望输入/输出 xml 能更清楚地解释我在寻找什么。

输入xml:

 <ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897986301</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>01</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897986301</ns:AttID>
      <ns:HRG>WF01B</ns:HRG>
      <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
      <ns:Tfc>191</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true" />
      <ns:PatOrgId xsi:nil="true" />
      <ns:CstActivity>
        <ns:ActCstID>OUT001</ns:ActCstID>
        <ns:ActCnt>1</ns:ActCnt>
        <ns:Resource>
          <ns:ResCstID>CPF002</ns:ResCstID>
          <ns:TotCst>0.01711470</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF004</ns:ResCstID>
          <ns:TotCst>0.00005506</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF011</ns:ResCstID>
          <ns:TotCst>0.12799014</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF022</ns:ResCstID>
          <ns:TotCst>0.00622135</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF023</ns:ResCstID>
          <ns:TotCst>6.55181258</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF024</ns:ResCstID>
          <ns:TotCst>0.08211900</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF027</ns:ResCstID>
          <ns:TotCst>0.04333875</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CSC004</ns:ResCstID>
          <ns:TotCst>18.95493831</ns:TotCst>
        </ns:Resource>
      </ns:CstActivity>
      <ns:CstActivity>
        <ns:ActCstID>SUP001</ns:ActCstID>
        <ns:ActCnt>1</ns:ActCnt>
        <ns:Resource>
          <ns:ResCstID>CPF002</ns:ResCstID>
          <ns:TotCst>0.00000124</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF011</ns:ResCstID>
          <ns:TotCst>0.00000148</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF022</ns:ResCstID>
          <ns:TotCst>0.00002230</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF023</ns:ResCstID>
          <ns:TotCst>-0.00000221</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CPF024</ns:ResCstID>
          <ns:TotCst>0.00017128</ns:TotCst>
        </ns:Resource>
        <ns:Resource>
          <ns:ResCstID>CSC004</ns:ResCstID>
          <ns:TotCst>0.16603542</ns:TotCst>

希望输出 xml:

<ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897986301</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>01</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897986301</ns:AttID>
      <ns:HRG>WF01B</ns:HRG>
      <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
      <ns:Tfc>191</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>
      <ns:ActCstID>OUT001</ns:ActCstID>
      <ns:ActCnt>1</ns:ActCnt>
      <ns:ResCstID>CPF002</ns:ResCstID>
      <ns:TotCst>0.01711470</ns:TotCst>
</ns:Activity>
<ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897986301</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>01</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897986301</ns:AttID>
      <ns:HRG>WF01B</ns:HRG>
      <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
      <ns:Tfc>191</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>
      <ns:ActCstID>THR001</ns:ActCstID>
      <ns:ActCnt>2</ns:ActCnt>
      <ns:ResCstID>CPF004</ns:ResCstID>
      <ns:TotCst>0.00005506</ns:TotCst>
</ns:Activity>        
    <ns:Activity>
      <ns:OrgId>RRK</ns:OrgId>
      <ns:CDSID>503897986301</ns:CDSID>
      <ns:NHSNo>1111111111</ns:NHSNo>
      <ns:NhsSt>01</ns:NhsSt>
      <ns:Postcd>RD15 2AD</ns:Postcd>
      <ns:DoB>1967-04-01</ns:DoB>
      <ns:Gendr>1</ns:Gendr>
      <ns:Pod>NCL</ns:Pod>
      <ns:AttID>503897986301</ns:AttID>
      <ns:HRG>WF01B</ns:HRG>
      <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
      <ns:Tfc>191</ns:Tfc>
      <ns:ConCode>C0000000</ns:ConCode>
      <ns:PathId xsi:nil="true"/>
      <ns:PatOrgId xsi:nil="true"/>
      <ns:ActCstID>SUP001</ns:ActCstID>
      <ns:ActCnt>1</ns:ActCnt>
      <ns:ResCstID>CPF002</ns:ResCstID>
      <ns:TotCst>0.00000124</ns:TotCst>
</ns:Activity>

所以基本上,对于下面字段的每个变体,都会引入旧的父节点,因此每个 CDSID 都有很多行,而不仅仅是一行。

  <ns:ActCstID>SUP001</ns:ActCstID>
  <ns:ActCnt>1</ns:ActCnt>
  <ns:ResCstID>CPF002</ns:ResCstID>
  <ns:TotCst>0.00000124</ns:TotCst>

再次感谢您的帮助。

考虑这个修改后的 XSLT,它沿着树向下走(与身份转换相反)以仅解析 ns:Activity 节点及其子节点和孙节点。此外,脚本避免重写它们的节点,因为在 MS Access 的 ImportXML 中,每个不同的嵌套元素都成为它自己的 table.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819" 
                              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/ns:HCDSExtract">
        <dataroot>
            <xsl:apply-templates select="ns:MessageBody"/>
        </dataroot>
    </xsl:template>

    <xsl:template match="ns:MessageBody">
        <xsl:apply-templates select="ns:Activity"/>
    </xsl:template>

    <xsl:template match="ns:Activity">
        <xsl:copy>
            <xsl:copy-of select="*[not(*)]"/>
            <xsl:copy-of select="*/*[not(*)]"/>
            <xsl:copy-of select="*/*/*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

XSLT demo

这里有一个扁平化某些层次结构的示例,例如:

<countries>
    <country>
        <name>USA</name>
        <state>Alabama</state>
        <state>Colorado</state>
    </country>
</countries>

此样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="countries">
        <states>
            <xsl:apply-templates select="country/state" mode="uprise"/>
        </states>
    </xsl:template>

    <xsl:template match="state"/>

    <xsl:template match="state" mode="uprise">
        <xsl:copy>
            <name>
                <xsl:value-of select="."/>
            </name>
            <xsl:apply-templates select=".."/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="country/name">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

输出:

<states>
   <state>
      <name>Alabama</name>
      <country>USA</country>
   </state>
   <state>
      <name>Colorado</name>
      <country>USA</country>
   </state>
</states>

请注意:对于扁平化,您以叶子为目标,然后在层次结构中向上生成输出。在这种情况下,我使用的是覆盖身份模板模式,因此有一种模式可以处理叶子,另一种模式(默认)可以停止进程,以免产生无限循环。

编辑:因为您似乎无法遵循这个逻辑,我将向您展示一个样式表,只是更改名称以匹配您的输入样本(也更正为格式正确).

本次输入:

<ns:HCDSExtract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819">
   <ns:MessageHeader>
      <ns:OrgSubmittingID>RRK</ns:OrgSubmittingID>
      <ns:FinYr>FY2018-19</ns:FinYr>
      <ns:PeriodStartDate>2018-05-01</ns:PeriodStartDate>
      <ns:PeriodEndDate>2018-05-31</ns:PeriodEndDate>
      <ns:CreateDateTime>2018-03-28T18:25:04</ns:CreateDateTime>
      <ns:FeedType>OP</ns:FeedType>
      <ns:NoOfActivityRecords>10</ns:NoOfActivityRecords>
      <ns:TotalCosts>100.000</ns:TotalCosts>
   </ns:MessageHeader>
   <ns:MessageBody>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:CstActivity>
            <ns:ActCstID>OUT001</ns:ActCstID>
            <ns:ActCnt>1</ns:ActCnt>
            <ns:Resource>
               <ns:ResCstID>CPF002</ns:ResCstID>
               <ns:TotCst>0.01711470</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF004</ns:ResCstID>
               <ns:TotCst>0.00005506</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF011</ns:ResCstID>
               <ns:TotCst>0.12799014</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF022</ns:ResCstID>
               <ns:TotCst>0.00622135</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF023</ns:ResCstID>
               <ns:TotCst>6.55181258</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF024</ns:ResCstID>
               <ns:TotCst>0.08211900</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF027</ns:ResCstID>
               <ns:TotCst>0.04333875</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CSC004</ns:ResCstID>
               <ns:TotCst>18.95493831</ns:TotCst>
            </ns:Resource>
         </ns:CstActivity>
         <ns:CstActivity>
            <ns:ActCstID>SUP001</ns:ActCstID>
            <ns:ActCnt>1</ns:ActCnt>
            <ns:Resource>
               <ns:ResCstID>CPF002</ns:ResCstID>
               <ns:TotCst>0.00000124</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF011</ns:ResCstID>
               <ns:TotCst>0.00000148</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF022</ns:ResCstID>
               <ns:TotCst>0.00002230</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF023</ns:ResCstID>
               <ns:TotCst>-0.00000221</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CPF024</ns:ResCstID>
               <ns:TotCst>0.00017128</ns:TotCst>
            </ns:Resource>
            <ns:Resource>
               <ns:ResCstID>CSC004</ns:ResCstID>
               <ns:TotCst>0.16603542</ns:TotCst>
            </ns:Resource>
         </ns:CstActivity>
      </ns:Activity>
   </ns:MessageBody>
</ns:HCDSExtract>

使用此样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819">
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>

        <xsl:template match="ns:MessageBody">
            <xsl:copy>
                <xsl:apply-templates
                     select="ns:Activity/ns:CstActivity/ns:Resource" mode="uprise"/>
            </xsl:copy>
        </xsl:template>

        <xsl:template match="ns:Resource|ns:CstActivity|ns:MessageHeader"/>

        <xsl:template match="ns:Resource" mode="uprise">
            <ns:Activity>
                <xsl:apply-templates select="../../*|../*"/>
                <xsl:apply-templates/>            
            </ns:Activity>
        </xsl:template>
    </xsl:stylesheet>

输出:

<ns:HCDSExtract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:ns="http://Improvement.nhs.uk/HealthcareCostingDataSet/v03-1819">
   <ns:MessageBody>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF002</ns:ResCstID>
         <ns:TotCst>0.01711470</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF004</ns:ResCstID>
         <ns:TotCst>0.00005506</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF011</ns:ResCstID>
         <ns:TotCst>0.12799014</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF022</ns:ResCstID>
         <ns:TotCst>0.00622135</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF023</ns:ResCstID>
         <ns:TotCst>6.55181258</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF024</ns:ResCstID>
         <ns:TotCst>0.08211900</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF027</ns:ResCstID>
         <ns:TotCst>0.04333875</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>OUT001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CSC004</ns:ResCstID>
         <ns:TotCst>18.95493831</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF002</ns:ResCstID>
         <ns:TotCst>0.00000124</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF011</ns:ResCstID>
         <ns:TotCst>0.00000148</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF022</ns:ResCstID>
         <ns:TotCst>0.00002230</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF023</ns:ResCstID>
         <ns:TotCst>-0.00000221</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CPF024</ns:ResCstID>
         <ns:TotCst>0.00017128</ns:TotCst>
      </ns:Activity>
      <ns:Activity>
         <ns:OrgId>RRK</ns:OrgId>
         <ns:CDSID>503897986301</ns:CDSID>
         <ns:NHSNo>1111111111</ns:NHSNo>
         <ns:NhsSt>01</ns:NhsSt>
         <ns:Postcd>RD15 2AD</ns:Postcd>
         <ns:DoB>1967-04-01</ns:DoB>
         <ns:Gendr>1</ns:Gendr>
         <ns:Pod>NCL</ns:Pod>
         <ns:AttID>503897986301</ns:AttID>
         <ns:HRG>WF01B</ns:HRG>
         <ns:AppDte>2018-05-02T10:19:00</ns:AppDte>
         <ns:Tfc>191</ns:Tfc>
         <ns:ConCode>C0000000</ns:ConCode>
         <ns:PathId xsi:nil="true"/>
         <ns:PatOrgId xsi:nil="true"/>
         <ns:ActCstID>SUP001</ns:ActCstID>
         <ns:ActCnt>1</ns:ActCnt>
         <ns:ResCstID>CSC004</ns:ResCstID>
         <ns:TotCst>0.16603542</ns:TotCst>
      </ns:Activity>
   </ns:MessageBody>
</ns:HCDSExtract>

检查一下here