使用 XSL 应用条件逻辑

Applying Conditional Logic using XSL

我有一个 XML 文档,其中我获得了成员的多个地址,地址类型为 PRIMARY、MAILING 等。但是当 memberId 为“0”时,我只想将地址读取为 PRIMARY、MAILING。请参阅下面的示例 xml。

     <core>
     <address>
        <postalZipCode>90017</postalZipCode>
        <updateSource>xxxxxx</updateSource>
        <city>LOS ANGELES</city>
        <stateProvince>CA</stateProvince>
        <type>MAILING</type>
        <line1>818 WEST SEVENTH STREET</line1>
    </address>
    <address>
        <postalZipCode>95014</postalZipCode>
        <updateSource>xxxxxx</updateSource>
        <city>CUPERTINO</city>
        <stateProvince>CA</stateProvince>
        <type>PRIMARY</type>
        <line1>1234 XYZ STREET</line1>
     </address>
      <memberId>0</memberId>
     </core>

我试图在我的 XSLT 文件中评估的 XSL 条件如下 -

    <xsl:template match="core">
    <xsl:when test="memberId[.='0'] and address/type[.='PRIMARY']">
    <fo:table-row>
        <fo:table-cell xsl:use-attribute-sets="data">
            <fo:block>Line 1</fo:block>
        </fo:table-cell>            
    </fo:table-row>

但此条件检查不起作用,地址未在生成的文档中呈现。 请问这里的专家能否建议我如何进行这种条件检查?

首先,除了 <xsl:choose> 之外,您不能将 <xsl:when> 作为任何其他对象的子代。我怀疑在这种情况下你可能打算使用 <xsl:if>.

其次,您的模板匹配 core,而不是主要的 address 元素 - 不确定这是有意还是无意。

第三,您的模板实际上并没有从源文档中输出任何内容,除非您在此处包含的内容有所遗漏。

通常建议使用适合您的条件的谓词编写模板,而不是在模板中使用明确的条件逻辑。我想你可能想要做的是:

<xsl:template match="core[memberId='0']/address[type='PRIMARY']">
  <fo:etc..
</xsl:template>