使用XSLT实现复杂的XML到XML的转换 [英] Complex XML to XML Transformation using XSLT
本文介绍了使用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,则相应地进行调整。
学习笔记
如果您想在将来自行解决类似问题,请尝试此技巧:
- 删除所有命名空间,除非命名空间是要解决的问题的固有部分。
- 将所有长节点名称替换为(香蕉、苹果、梨)等容易记住的短名称。
- 简化并消除节点,直到问题的真正核心。如果您的两个节点类型BANANA和APPLE遵循相同的规则,则只需在示例数据中使用香蕉即可。
- 生成许多与您的转换规则的复杂性成比例的用例,并尝试使用例覆盖边缘条件,并且范围广泛。
- 像对待任何其他编程语言一样对待XSLT。如果你必须用Java编写程序,但你一开始对Java一无所知,你会买一本书或参加一个培训课程,对吗?就像任何其他语言一样,你不能仅仅通过看SO上的例子来学习它。
更新
OP要求修改样式表,以便有效日期元素的输出在其本地名称中没有嵌入数字。因此,以下是更改...
将大的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" />
对于中间位(在esse xsl:Copy-of SELECT="."),我们不能使用Copy-Of,因为我们想要更改名称。所以我们用一个文字元素替换...
<bb:projectedBalanceTotal.effectiveDate> <xsl:value-of select="." /> </bb:projectedBalanceTotal.effectiveDate>
第三位也就是最后一位与第一位类似,但只是针对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屋!
查看全文