使用XSLT进行复杂的XML到XML转换

时间:2012-07-24 20:22:37

标签: xml xslt xslt-1.0

这对你们所有人来说可能并不复杂,但这对我来说非常困难。这是我的第二次尝试。我已经改变了我的数据,以包含更多信息,这些信息将需要更少的转换。

基本上我试图获取由三个休假计划(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_Eligible_Time_Off_Plans_for_Worker”,并将“bb:Report_Entry”替换为“projectedBalanceTotal”。

我几乎没有起点,只是我编写了成功删除“All_Eligible_Time_Off_Plans_for_Worker”的XSL代码并用“projectedBalanceTotal”替换“bb:Report_Entry”。可以在这里找到:

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

任何帮助都会很棒!非常感谢提前。

1 个答案:

答案 0 :(得分:2)

试试这个......

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

买者

此输出&lt; bb:projectedBalanceTotal.effectiveDate \ d&gt;节点,其中“\ d”表示某个整数。在您的示例输入中,您有effectiveDate1,effectiveDate2等。但是在您的预期输出中只有effectiveDate1。我没有费心将所有effectiveDate \ d节点重命名为effectiveDate1,因为这可能是您的一个文书错误的高可能性。因此,如果您要求所有effectiveDate \ d节点都被称为精确有效的Date1,则相应地进行调整。

学习笔记

如果您想在将来自行解决类似问题,请尝试以下方法:

  1. 删除所有名称空间,除非名称空间是要解决的问题的固有部分。
  2. 将所有长节点名称替换为令人难忘的节点名称,如(香蕉,苹果,梨)。
  3. 简化并消除节点到问题的真实结点。如果你有两个节点类型banana和apple处理相同的规则,只需在样本数据中使用banana。
  4. 生成与转换规则的复杂性成比例的大量用例,并尝试使用用例来覆盖边缘条件,并且范围广泛。
  5. 以与任何其他编程语言相同的方式对待XSLT。如果你不得不用Java编写一个程序,但是你开始对该语言一无所知,你会买一本书或参加一个培训课程,对吗?就像任何其他语言一样,仅仅通过查看SO上的示例就无法学习。

  6. 更新

    OP已要求对样式表进行修改,以使effectiveDate元素的输出没有嵌入其本地名称中的数字。所以这里有变化......

    1. 将大xsl:copy-of分成3个部分。一个在点(。)之前,一个用于点(。),一个用于点之后(即employeeid)。所以之前的位看起来像这样......

       <xsl:copy-of select="
         ../../bb:projectedBalanceTotal.principalId  |
         ../bb:projectedBalanceTotal.planCodeId      |
         ../bb:projectedBalanceTotal.leaveCodeId     |
         ../bb:projected_balance_accrual_amount_for_the_pay_period" />
      
    2. 对于中间位(在xsl:copy-of select =“。”中),我们无法使用副本,因为我们想要更改名称。所以我们替换像这样的文字元素......

       <bb:projectedBalanceTotal.effectiveDate>
        <xsl:value-of select="." />
       </bb:projectedBalanceTotal.effectiveDate>
      
    3. 第3位和最后一位与第一位相同,但仅适用于employeeid元素。

    4. 完全放弃,我们得到了我们的模板......

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