特定のノード(EN_PLAN_NAME)のテキストと文字列のリストを比較しようとしているため、これらの文字列のいずれかと一致するテキストを含むノードのみを出力できます。XSLT 1.0外部パラメータノードセットでの使用の使用
XSLTHow to compare against multiple strings in xslt
INPUTのXML
<EligibilityRecords xmlns="http://CDHC_Eligibility_LSDD">
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>Health Savings Account</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>zzHealth Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>Health Reimbursement Arrangement 233</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>HRA</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>BASE HRA</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>FSA</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
</EligibilityRecords>
期待される出力XML
<EligibilityRecords xmlns="CDHC_Eligibility_LSDD_Internal">
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>zzHealth Reimbursement Arrangement</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>Health Reimbursement Arrangement 233</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>HRA</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
<Eligibility_Detail_Record xmlns="">
<EN_PLAN_NAME>BASE HRA</EN_PLAN_NAME>
<EN_MBRSHP_EFF_STRT_DT>01012017</EN_MBRSHP_EFF_STRT_DT>
</Eligibility_Detail_Record>
</EligibilityRecords>
:私はこれと同様の質問から答えを使用してみました
<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 s0 ns0" version="1.0" xmlns:s0="CDHC_Eligibility_LSDD" xmlns:ns0="CDHC_Eligibility_LSDD_Internal"> <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> <xsl:param name="HRAPlanNames"> <PlanName>Health Reimbursement Arrangement</PlanName> <PlanName>HRA</PlanName> </xsl:param> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="/*"> <ns0:EligibilityRecords> <xsl:for-each select="Eligibility_Detail_Record"> <xsl:if test="contains(EN_PLAN_NAME,msxsl:node-set($HRAPlanNames)/*)"> <Eligibility_Detail_Record> <xsl:copy-of select="EN_PLAN_NAME"/> </Eligibility_Detail_Record> </xsl:if> </xsl:for-each> </ns0:EligibilityRecords> </xsl:template> </xsl:stylesheet>
XSLTは「健康償還アレンジメント」を含むテキストを持っていますが、出力「HRA」が含まれている任意のノードをしないすべてのEN_PLAN_NAMEを出力します。私は何が間違っているのか分かりません。