代码之家  ›  专栏  ›  技术社区  ›  Display name

复制除具有两个子元素的节点外的所有节点

  •  1
  • Display name  · 技术社区  · 8 年前

    我尝试过几种方法,但我显然不太了解比赛和测试元素。

    第一个钻头工作正常。如果is包含等于“I”的子元素EligibilityorBenefitInformation,则它排除整个eligibilitybenefitment元素。

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:output method="xml" encoding="utf-8" indent="yes"/>
    
        <!-- Identity template : copy all text nodes, elements and attributes -->   
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()" />
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="EligibilityorBenefit[EligibilityorBenefitInformation='I']" />
    
      </xsl:stylesheet>
    

    问题是当我试图使选择更具限制性时。

    我试过了,但都不管用

    match="EligibilityorBenefit[EligibilityorBenefitInformation='I' and ServiceTypeCode='35']"
    
    match="EligibilityorBenefit[EligibilityorBenefitInformation='I'] and EligibilityorBenefit[ServiceTypeCode='35']"
    

    我也试着用这样的火柴

        <xsl:template match="EligibilityorBenefit">
          <xsl:choose>
          <xsl:when test="EligibilityorBenefitInformation='I' and ServiceTypeCode='35'">
          </xsl:when>
          <xsl:otherwise>
            <xsl:apply-templates select="@*|node()" />
          </xsl:otherwise>
          </xsl:choose>
        </xsl:template>
    

    这就是我所拥有的

    <Eligibility217>
      <Loop2110>
        <EligibilityorBenefit>
          <EligibilityorBenefitInformation>I</EligibilityorBenefitInformation>
          <CoverageLevelCode />
          <ServiceTypeCode>30</ServiceTypeCode>
          <InsuranceTypeCode>EP</InsuranceTypeCode>
        </EligibilityorBenefit>
      </Loop2110>
      <Loop2110>
        <EligibilityorBenefit>
          <EligibilityorBenefitInformation>A</EligibilityorBenefitInformation>
          <CoverageLevelCode>IND</CoverageLevelCode>
          <ServiceTypeCode>33</ServiceTypeCode>
        </EligibilityorBenefit>
        <EligibilityorBenefit>
          <EligibilityorBenefitInformation>I</EligibilityorBenefitInformation>
          <CoverageLevelCode>IND</CoverageLevelCode>
          <ServiceTypeCode>35</ServiceTypeCode>
        </EligibilityorBenefit>
        <Message>
          <MessageText>Specialist</MessageText>
        </Message>
        <Loop2115>
          <Information>
            <CodeListQualifierCode>ZZ</CodeListQualifierCode>
            <IndustryCode>11</IndustryCode>
          </Information>
        </Loop2115>
      </Loop2110>
    </Eligibility217>
    

    这就是我想要的

    <Eligibility217>
      <Loop2110>
        <EligibilityorBenefit>
          <EligibilityorBenefitInformation>I</EligibilityorBenefitInformation>
          <CoverageLevelCode />
          <ServiceTypeCode>30</ServiceTypeCode>
          <InsuranceTypeCode>EP</InsuranceTypeCode>
        </EligibilityorBenefit>
      </Loop2110>
      <Loop2110>
        <EligibilityorBenefit>
          <EligibilityorBenefitInformation>A</EligibilityorBenefitInformation>
          <CoverageLevelCode>IND</CoverageLevelCode>
          <ServiceTypeCode>33</ServiceTypeCode>
        </EligibilityorBenefit>
        <Message>
          <MessageText>Specialist</MessageText>
        </Message>
        <Loop2115>
          <Information>
            <CodeListQualifierCode>ZZ</CodeListQualifierCode>
            <IndustryCode>11</IndustryCode>
          </Information>
        </Loop2115>
      </Loop2110>
    </Eligibility217>
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Display name    8 年前

    答案是我无意中在我所尝试的例子中给出的。

    出于某种原因,我不相信它起了作用。再次检查后,我现在知道我从一开始就有了解决方案。

    match="EligibilityorBenefit[EligibilityorBenefitInformation='I' and ServiceTypeCode='35']"