使用XSL应用条件逻辑

时间:2017-07-20 15:00:33

标签: xslt xsl-fo

我有一个XML文档,其中我为一个成员获取了几个地址类型作为地址类型PRIMARY,MAILING等。但是我只想将地址读作PRIMARY,当memberId为' 0时#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>

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

1 个答案:

答案 0 :(得分:1)

首先,您不能将<xsl:when>作为除<xsl:choose>以外的任何其他内容的孩子。我怀疑在这种情况下你可能想要使用<xsl:if>

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

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

通常,建议使用符合条件的谓词编写模板,而不是模板中的显式条件逻辑。我想你可能想做的是:

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