将带有嵌套节点的 xml 导入 Access(并且需要使用 xsl 将 xml 转换为“平面"结构) [英] Importing xml with nested nodes into Access (and needing to transform the xml into a 'flat' structure with xsl)

查看:30
本文介绍了将带有嵌套节点的 xml 导入 Access(并且需要使用 xsl 将 xml 转换为“平面"结构)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

拼命尝试将一些数据导入 Access 中,但未能成功,这些数据由各种嵌套节点组成,当我只想拥有一个时,这些数据在导入时被放入单独的表中.

Desperately trying and failing to import some data into Access that comprises of various nested nodes that on import are being put into separate tables when I only desire to have one.

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

I just would like to have the Activity table with all the data in the nested nodes to be in this parent table.

我已经尝试从以前的类似问题中调整一些代码,但我的尝试似乎毫无希望,因为它甚至没有从活动"表中提取任何信息,但是它在CstActivity"表中创建了AttID"字段我想我最终可以达到目的,以便在表之间进行连接/链接.唯一的问题是它实际上并没有用相关的 ID 填充它!

I've tried adjusting some code from a previous similar question but my attempt appears hopeless as it is not even pulling any information from the 'Activity' table, however it has created the 'AttID' field in the 'CstActivity' table that I suppose I could eventually get to the point in order to do a join / link across tables. Only problem is it didn't actually populate this with the relevant ids!

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

But ideally, I would just like to transform the data so that the import just includes everything in the nested nodes in the relevant lines on the 'Activity' node.

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

任何帮助将不胜感激.提前致谢.

Any help will be hugely appreciated. Thank you in advance.

我的新 xsl 如下:

My new xsl is below:


<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 输出如下:

So my latest xsl gives an output like:

    <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 位信息......我希望父节点中的每个相关记录对于每个不同的子节点重复.我希望这是有道理的.

There may be many of these 4 bits of information for each entry in the parent node....and I would like each relevant record in the parent node to be repeated for each of the different child nodes. I hope that makes sense.

这么多想要的输出 xml 将是:

So many desired output xml would be:

   <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 能更清楚地解释我正在寻找的内容.

Latest edit to outline hoped for output. I am sorry I probably didn't give a very good example input xml to work a solution from but hopefully the input / output xml explains what I'm looking for more clearly.

输入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 都有很多行,而不仅仅是一行.

So essentially, for every variation of the fields below, the old parent node is brought in so we have many lines for each CDSID and not just one.

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

再次感谢您的帮助.

推荐答案

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

Here you have an example for flattening some hierarchy like:

<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>

请注意:为了展平,您将目标放在叶子上,然后在层次结构上产生输出.在这种情况下,我使用了覆盖的身份模板模式,因此有一种模式可以处理叶子,另一种模式(默认)可以停止该过程,以免产生无限循环.

Do note: for flattening you target the leaves and then produce output going up the hierarchy. In this case I'm using the overriding indentity template pattern, thus there is a mode to process the leaf and another mode (default) to stop the process in order to not produce an infinite loop.

编辑:因为您似乎在遵循此逻辑时遇到问题,所以我将向您展示一个样式表,只是更改了名称以匹配您的输入样本(也更正为格式正确强>).

EDIT: Because you seems to have troubles following this logic, I will show you an stylesheet just with the names changed to match your input sample (also corrected to be well formed).

这个输入:

<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>

此处查看

这篇关于将带有嵌套节点的 xml 导入 Access(并且需要使用 xsl 将 xml 转换为“平面"结构)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆