使用 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>
我有一个 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>