将具有嵌套节点的xml导入Access(并且需要使用xsl将xml转换为“扁平”结构)

时间:2019-08-14 12:08:27

标签: xml xslt xslt-1.0 xslt-2.0

拼命地尝试并且无法将某些数据导入到Access中,该数据由各种嵌套节点组成,这些导入节点在我只希望拥有一个嵌套表时将被放入单独的表中。

我只想让Activity表的嵌套节点中的所有数据都在此父表中。

我已经尝试从以前的类似问题中调整一些代码,但是我的尝试似乎没有希望,因为它甚至没有从“活动”表中提取任何信息,但是它已经在“ CstActivity”表中创建了“ AttID”字段我想我最终可以做到这一点,以便跨表进行联接/链接。唯一的问题是它实际上并未使用相关ID填充它!

但是理想情况下,我只想对数据进行转换,以使导入仅包含“活动”节点上相关行中嵌套节点中的所有内容。

要导入的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>

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

考虑这个经过修订的XSLT,它沿着树走了下来(与身份转换相反),仅解析 ns:Activity 节点及其子代和孙代。另外,脚本避免了重写它们的节点,因为在MS Access的ImportXML中,每个不同的嵌套元素都变成了自己的表。

<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

答案 1 :(得分:0)

这里有一个用于平整某些层次结构的示例:

<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

相关问题