我有一个相当大(270mb)的XML文件,我需要对其进行分组,排序和运行多个转换 .
Input XML:
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<EligibilityRecords xmlns="http://Eligibility_LSDD">
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID></PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>VALLE</PT_LST_NM>
<PT_FRST_NM>FRANKIE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID></DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID></DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP></DP_RELATIONSHIP>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>123456</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>BULLOCK</PT_LST_NM>
<PT_FRST_NM>SANDRA</PT_FRST_NM>
<EN_PLAN_NAME></EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID></DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID></DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP></DP_RELATIONSHIP>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>553739837</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>DOE</PT_LST_NM>
<PT_FRST_NM>JANE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID></DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID></DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP></DP_RELATIONSHIP>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>610051908</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>JACKSON</PT_LST_NM>
<PT_FRST_NM>MICHAEL</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID>610051908</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110015202761</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Spouse</DP_RELATIONSHIP>
<DP_LST_NM>JACKSON</DP_LST_NM>
<DP_FRST_NM>MELISSA</DP_FRST_NM>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>561859010</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>MCLEOD</PT_LST_NM>
<PT_FRST_NM>CONOR</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID>561859010</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>SC000018241906</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>MCLEOD</DP_LST_NM>
<DP_FRST_NM>DUNCAN</DP_FRST_NM>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>573794953</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>GABRIEL</PT_LST_NM>
<PT_FRST_NM>PETER</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID></DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID></DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP></DP_RELATIONSHIP>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>553739837</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>DOE</PT_LST_NM>
<PT_FRST_NM>JANE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077673</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Spouse</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JOHN</DP_FRST_NM>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>553739837</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>DOE</PT_LST_NM>
<PT_FRST_NM>JANE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077680</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JIMMY</DP_FRST_NM>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>553739837</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>DOE</PT_LST_NM>
<PT_FRST_NM>JANE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077681</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JESSICA</DP_FRST_NM>
</Eligibility_Detail_Record>
</EligibilityRecords>
I have the following requirements:
-
删除所有具有空白PT_PARTICIPANT_FILE_IMP_ID且EN_PLAN_NAME节点不是"Health Reimbursement Arrangement"或"Health Savings Account"的Eligibility_Detail_Records
-
为与PT_PARTICIPANT_FILE_IMP_ID匹配的每个DP_PARTICIPANT_FILE_IMP_ID创建一个新的Dependent_Record,它是Eligibility_Detail_Record的子记录
-
为EN_PLAN_NAME为"Health Reimbursement Arrangement"的每条记录添加一个EN_PLAN_TYPE字段,其内容如下:
-
"Ind"如果没有找到家属
-
"IndSpouse"如果只有一个拥有配偶DP_RELATIONSHIP的依赖者
-
"IndChild"如果只有一个依赖DP_RELATIONSHIP的依赖项
-
"Family"如果有多个依赖项
-
为EN_PLAN_NAME为"Health Savings Account"的每条记录添加一个EN_HDHP_COVERAGE_LEVEL字段,其内容如下:
-
"Ind"如果没有找到家属
-
"Family"如果找到一个或多个家属
Expected XML output:
<!-- language: lang-xml -->
<?xml version="1.0" encoding="UTF-8"?>
<EligibilityRecords xmlns="http://Eligibility_LSDD">
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>553739837</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>DOE</PT_LST_NM>
<PT_FRST_NM>JANE</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_PLAN_TYPE>Family</EN_PLAN_TYPE>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077673</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Spouse</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JOHN</DP_FRST_NM>
</Dependent_Record>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077680</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JIMMY</DP_FRST_NM>
</Dependent_Record>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>553739837</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110012077681</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>DOE</DP_LST_NM>
<DP_FRST_NM>JESSICA</DP_FRST_NM>
</Dependent_Record>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>610051908</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>JACKSON</PT_LST_NM>
<PT_FRST_NM>MICHAEL</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_PLAN_TYPE>IndSpouse</EN_PLAN_TYPE>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012017</EN_PLAN_YEAR_STRT_DT>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>610051908</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>NC110015202761</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Spouse</DP_RELATIONSHIP>
<DP_LST_NM>JACKSON</DP_LST_NM>
<DP_FRST_NM>MELISSA</DP_FRST_NM>
</Dependent_Record>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>561859010</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>MCLEOD</PT_LST_NM>
<PT_FRST_NM>CONOR</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_PLAN_TYPE>IndChild</EN_PLAN_TYPE>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>561859010</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>SC000018241906</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>MCLEOD</DP_LST_NM>
<DP_FRST_NM>DUNCAN</DP_FRST_NM>
</Dependent_Record>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>573794953</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>GABRIEL</PT_LST_NM>
<PT_FRST_NM>PETER</PT_FRST_NM>
<EN_PLAN_NAME>Health Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<EN_PLAN_TYPE>Ind</EN_PLAN_TYPE>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<PT_PARTICIPANT_FILE_IMP_ID>561859457</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>BUGLE</PT_LST_NM>
<PT_FRST_NM>MAN</PT_FRST_NM>
<EN_PLAN_NAME>Health Savings Account</EN_PLAN_NAME>
<EN_HDHP_COVERAGE_LEVEL>Family</EN_HDHP_COVERAGE_LEVEL>
<EN_MBRSHP_EFF_STRT_DT>01012016</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT></EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>01012016</EN_PLAN_YEAR_STRT_DT>
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>561859457</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>SC000018241906</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>Dependent</DP_RELATIONSHIP>
<DP_LST_NM>BUGLE</DP_LST_NM>
<DP_FRST_NM>BOY</DP_FRST_NM>
</Dependent_Record>
</Eligibility_Detail_Record>
</EligibilityRecords>
XSLT:
<!-- language: lang-xml -->
<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0" xmlns:ns0="http://Eligibility_LSDD" xmlns:set="http://exslt.org/sets">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:key name="ParticipantGroup" match="Eligibility_Detail_Record" use="PT_PARTICIPANT_FILE_IMP_ID" />
<xsl:key name="DependentSearch" match="Eligibility_Detail_Record" use="DP_PARTICIPANT_FILE_IMP_ID" />
<xsl:template match="/">
<xsl:apply-templates select="/ns0:EligibilityRecords" />
</xsl:template>
<xsl:template match="/ns0:EligibilityRecords">
<ns0:EligibilityRecords>
<xsl:for-each select="set:distinct(Eligibility_Detail_Record/PT_PARTICIPANT_FILE_IMP_ID)/..">
<xsl:if test="PT_PARTICIPANT_FILE_IMP_ID != '' and (EN_PLAN_NAME = 'Health Reimbursement Arrangement' or EN_PLAN_NAME = 'Health Savings Account')">
<Eligibility_Detail_Record>
<PT_PARTICIPANT_FILE_IMP_ID>
<xsl:value-of select="PT_PARTICIPANT_FILE_IMP_ID/text()" />
</PT_PARTICIPANT_FILE_IMP_ID>
<PT_LST_NM>
<xsl:value-of select="PT_LST_NM/text()" />
</PT_LST_NM>
<PT_FRST_NM>
<xsl:value-of select="PT_FRST_NM/text()" />
</PT_FRST_NM>
<EN_PLAN_NAME>
<xsl:value-of select="EN_PLAN_NAME/text()" />
</EN_PLAN_NAME>
<xsl:choose>
<xsl:when test="EN_PLAN_NAME = 'Health Reimbursement Arrangement'">
<xsl:choose>
<xsl:when test="key('DependentSearch',DP_PARTICIPANT_FILE_IMP_ID) != ''">
<xsl:choose>
<xsl:when test="count(key('DependentSearch',DP_PARTICIPANT_FILE_IMP_ID)) > 1">
<EN_PLAN_TYPE>Family</EN_PLAN_TYPE>
</xsl:when>
<xsl:when test="count(key('DependentSearch',DP_PARTICIPANT_FILE_IMP_ID)) = 1">
<xsl:choose>
<xsl:when test="DP_RELATIONSHIP = 'Spouse'">
<EN_PLAN_TYPE>IndSpouse</EN_PLAN_TYPE>
</xsl:when>
<xsl:otherwise>
<EN_PLAN_TYPE>IndChild</EN_PLAN_TYPE>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<EN_PLAN_TYPE>Ind</EN_PLAN_TYPE>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="EN_PLAN_NAME = 'Health Savings Account'">
<xsl:choose>
<xsl:when test="count(key('DependentSearch',DP_PARTICIPANT_FILE_IMP_ID)) > 0">
<EN_HDHP_COVERAGE_LEVEL>Family</EN_HDHP_COVERAGE_LEVEL>
</xsl:when>
<xsl:otherwise>
<EN_HDHP_COVERAGE_LEVEL>Single</EN_HDHP_COVERAGE_LEVEL>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
<EN_MBRSHP_EFF_STRT_DT>
<xsl:value-of select="EN_MBRSHP_EFF_STRT_DT/text()" />
</EN_MBRSHP_EFF_STRT_DT>
<EN_MBRSHP_EFF_END_DT>
<xsl:value-of select="EN_MBRSHP_EFF_END_DT/text()" />
</EN_MBRSHP_EFF_END_DT>
<EN_PLAN_YEAR_STRT_DT>
<xsl:value-of select="EN_PLAN_YEAR_STRT_DT/text()" />
</EN_PLAN_YEAR_STRT_DT>
<xsl:for-each select="key('ParticipantGroup',PT_PARTICIPANT_FILE_IMP_ID)">
<xsl:if test="DP_DEPENDENT_FILE_IMP_ID/text()">
<Dependent_Record>
<DP_PARTICIPANT_FILE_IMP_ID>
<xsl:value-of select="DP_PARTICIPANT_FILE_IMP_ID/text()" />
</DP_PARTICIPANT_FILE_IMP_ID>
<DP_DEPENDENT_FILE_IMP_ID>
<xsl:value-of select="DP_DEPENDENT_FILE_IMP_ID/text()" />
</DP_DEPENDENT_FILE_IMP_ID>
<DP_RELATIONSHIP>
<xsl:value-of select="DP_RELATIONSHIP/text()" />
</DP_RELATIONSHIP>
<DP_LST_NM>
<xsl:value-of select="DP_LST_NM/text()" />
</DP_LST_NM>
<DP_FRST_NM>
<xsl:value-of select="DP_FRST_NM/text()" />
</DP_FRST_NM>
</Dependent_Record>
</xsl:if>
</xsl:for-each>
</Eligibility_Detail_Record>
</xsl:if>
</xsl:for-each>
</ns0:EligibilityRecords>
</xsl:template>
</xsl:stylesheet>
我在XML方面相当绿,但是我使用Muenchian Grouping在相应的父记录下创建依赖组,然后有想法为 DP_PARTICIPANT_FILE_IMP_ID 创建另一个密钥,然后计算该密钥的出现次数以确定应该是 EN_PLAN_TYPE 或 EN_HDHP_COVERAGE_LEVEL .
满足了我的所有要求,除了 EN_PLAN_TYPE 代码之外,一切都正常 . 即使这几乎可以正常工作 .
当满足这些条件时,它会正确输出 IndSpouse , IndChild 和Family,但当特定父记录没有依赖项时,它仍会在 EN_PLAN_TYPE node 中输出Family .
我的假设是,当你创建一个 xsl:key 时,它会在每个键值对中放入空值,我认为我正在测试它,但显然我不是 .
我将采取任何和所有建议,如何使这些代码更具可读性/效率/你有什么 . 例如使用模板从结果集中删除不需要的节点而不是使用 xsl:if . 但我现在主要担心的是将正确的输出输入 EN_PLAN_TYPE 节点 .
我正在使用的引擎实际上是BizTalk 2010 Mapper,我可以访问ESXLT(我已经在使用Muenchian Grouping)
1 回答
我的回答是基于您原始的,更详细的要求:
我开始查看你的原始XSLT(在编辑之前为了简洁),但我认为它比它需要的更复杂一点,这使得更难确定产生
EN_PLAN_TYPE
的问题是什么 .以下是一些建议:
根据
PT_PARTICIPANT_FILE_IMP_ID
将所有参与者联系在一起,只需使用一个xsl:key
.由于您没有对大多数元素的内容进行任何更改,而是创建新元素并使用
xsl:value-of
输出文本(),只需使用xsl:copy-of
复制原始元素 .对于更大的逻辑部分,比如确定
EN_PLAN_TYPE
/EN_HDHP_COVERAGE_LEVEL
,创建可以调用的命名模板(或者可以应用模板) .这是一个例子 . 确定
Health Savings Account
为Health Savings Account
hasn 't been tested since there wasn' t输入中的示例 .XML Input
XSLT 1.0 (要求添加为评论)
Output