使用XSLT实现复杂的XML到XML的转换 [英] Complex XML to XML Transformation using XSLT

查看:6
本文介绍了使用XSLT实现复杂的XML到XML的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这对你们所有人来说可能并不复杂,但对我来说却非常困难。这是我的第二次尝试。我已经改变了我的数据,以包括更多的信息,这些信息转化起来所需的时间更短。

基本上,我正在尝试获取由三个假期计划(VA、SS和WR)组成的数据,并预测出每个计划在每个支付期、按员工计算的一整年的累计时间。我只在我的数据中包括了三个支付期,以保持简短(呃)。我需要每个员工/生效日期组合的单独记录。因此,如果一名员工有三个假期计划,并且每两周支付一次工资(26次/年),则该员工可能有78条记录。

以下是我开始使用的XML(请记住,在我的示例中我只使用了前3个支付期日期,而不是全部26个):

 <?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.workday.report/Projected_Balances_Outbound">
   <bb:Report_Entry>
      <bb:projectedBalanceTotal.principalId>1238974569</bb:projectedBalanceTotal.principalId>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </bb:Report_Entry>
   <bb:Report_Entry>
      <bb:projectedBalanceTotal.principalId>4545645878</bb:projectedBalanceTotal.principalId>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:All_Eligible_Time_Off_Plans_for_Worker>
         <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
         <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
         <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
         <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
         <bb:projectedBalanceTotal.effectiveDate2>07252012</bb:projectedBalanceTotal.effectiveDate2>
         <bb:projectedBalanceTotal.effectiveDate3>08082012</bb:projectedBalanceTotal.effectiveDate3>

      </bb:All_Eligible_Time_Off_Plans_for_Worker>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </bb:Report_Entry>
</bb:Report_Data>

以下是我需要在转换后使输出看起来是什么样子:

<?xml version='1.0' encoding='UTF-8'?>
<bb:Report_Data xmlns:bb="urn:com.workday.report/Projected_Balances_Outbound">
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569</bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.323</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>1238974569/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>123454</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>


   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>SS</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>SS</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>3.692</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>WR</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>WR</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07112012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>07252012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
   <projectedBalanceTotal>
      <bb:projectedBalanceTotal.principalId>4545645878/bb:projectedBalanceTotal.principalId>
      <bb:projectedBalanceTotal.planCodeId>VA</bb:projectedBalanceTotal.planCodeId>
      <bb:projectedBalanceTotal.leaveCodeId>VA</bb:projectedBalanceTotal.leaveCodeId>
      <bb:projected_balance_accrual_amount_for_the_pay_period>0</bb:projected_balance_accrual_amount_for_the_pay_period>
      <bb:projectedBalanceTotal.effectiveDate1>08082012</bb:projectedBalanceTotal.effectiveDate1>
      <bb:projectedBalanceTotal.employeeid>445241</bb:projectedBalanceTotal.employeeid>
   </projectedBalanceTotal>
</bb:Report_Data>
还有几件事需要注意……除了格式更改之外,我还完全删除了元素标记"all_aligicient_time_off_plans_for_Worker",并将"bb:report_entry"替换为"project tedBalanceTotal"。

我几乎没有起点,除了我编写的XSL代码成功删除了"ALL_QUALITY_TIME_OFF_PLANS_FOR_Worker",并将"bb:report_entry"替换为"project tedBalanceTotal"。可在此处找到:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:wd="urn:com.workday.report/CR-INT486-Kuali_Trojan_Time-Absence_Balances__Hospital_Bi-Weekly_-Outbound" 
    exclude-result-prefixes="wd">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="wd:All_Eligible_Time_Off_Plans_for_Worker">
        <xsl:apply-templates/>
    </xsl:template>

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

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

</xsl:stylesheet>

任何帮助都是最好的!提前谢谢了。

推荐答案

试试...

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:bb="urn:com.workday.report/Projected_Balances_Outbound">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
 <bb:Report_Data>
   <xsl:apply-templates select="*/*/*/*[starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]"/>
 </bb:Report_Data>
</xsl:template>

<xsl:template match="*">
<!-- Add predicate [starts-with(local-name(),'projectedBalanceTotal.effectiveDate')]
     to the match pattern if you feel like it. -->
   <projectedBalanceTotal>
     <xsl:copy-of select="
       ../../bb:projectedBalanceTotal.principalId  |
       ../bb:projectedBalanceTotal.planCodeId      |
       ../bb:projectedBalanceTotal.leaveCodeId     |
       ../bb:projected_balance_accrual_amount_for_the_pay_period |
       .                                           |
       ../../bb:projectedBalanceTotal.employeeid"   />
   </projectedBalanceTotal>
</xsl:template>

</xsl:stylesheet>

警告

这将输出<;bb:project tedBalanceTotal.ffectiveDated>节点,其中"d"表示某个整数。在您的样例输入中,您有生效日期1、生效日期2等。但是,在您预期的输出中,只有生效日期1。我没有费心将所有的生效日期节点重命名为生效日期1,因为这很可能只是您的一个笔误。因此,如果您要求将所有生效日期节点准确地称为生效日期1,则相应地进行调整。

学习笔记

如果您想在将来自行解决类似问题,请尝试此技巧:

  1. 删除所有命名空间,除非命名空间是要解决的问题的固有部分。
  2. 将所有长节点名称替换为(香蕉、苹果、梨)等容易记住的短名称。
  3. 简化并消除节点,直到问题的真正核心。如果您的两个节点类型BANANA和APPLE遵循相同的规则,则只需在示例数据中使用香蕉即可。
  4. 生成许多与您的转换规则的复杂性成比例的用例,并尝试使用例覆盖边缘条件,并且范围广泛。
  5. 像对待任何其他编程语言一样对待XSLT。如果你必须用Java编写程序,但你一开始对Java一无所知,你会买一本书或参加一个培训课程,对吗?就像任何其他语言一样,你不能仅仅通过看SO上的例子来学习它。

更新

OP要求修改样式表,以便有效日期元素的输出在其本地名称中没有嵌入数字。因此,以下是更改...

  1. 将大的xsl:Copy-of分为3个部分。一个在点(.)之前,一个用于点(.),一个用于点后(即Emploeid)。因此,前面的位如下所示...

     <xsl:copy-of select="
       ../../bb:projectedBalanceTotal.principalId  |
       ../bb:projectedBalanceTotal.planCodeId      |
       ../bb:projectedBalanceTotal.leaveCodeId     |
       ../bb:projected_balance_accrual_amount_for_the_pay_period" />
    
  2. 对于中间位(在esse xsl:Copy-of SELECT="."),我们不能使用Copy-Of,因为我们想要更改名称。所以我们用一个文字元素替换...

     <bb:projectedBalanceTotal.effectiveDate>
      <xsl:value-of select="." />
     </bb:projectedBalanceTotal.effectiveDate>
    
  3. 第三位也就是最后一位与第一位类似,但只是针对Emploeid元素。

总而言之,我们的模板是...

<xsl:template match="*">
   <projectedBalanceTotal>
     <xsl:copy-of select="
       ../../bb:projectedBalanceTotal.principalId  |
       ../bb:projectedBalanceTotal.planCodeId      |
       ../bb:projectedBalanceTotal.leaveCodeId     |
       ../bb:projected_balance_accrual_amount_for_the_pay_period" />
     <bb:projectedBalanceTotal.effectiveDate>
      <xsl:value-of select="." />
     </bb:projectedBalanceTotal.effectiveDate>
     <xsl:copy-of select="../../bb:projectedBalanceTotal.employeeid" />
   </projectedBalanceTotal>
</xsl:template>

这篇关于使用XSLT实现复杂的XML到XML的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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