我有一个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>
但是这个条件检查不起作用,地址不会在生成的文档中呈现。 请问这里的专家建议我如何进行这种有条件的检查?
答案 0 :(得分:1)
首先,您不能将<xsl:when>
作为除<xsl:choose>
以外的任何其他内容的孩子。我怀疑在这种情况下你可能想要使用<xsl:if>
。
其次,您的模板与core
匹配,而不是主要address
元素 - 不确定这是否是有意的。
第三,你的模板实际上并没有从源文档中输出任何内容,除非你在这里包含的内容有所遗漏。
通常,建议使用符合条件的谓词编写模板,而不是模板中的显式条件逻辑。我想你可能想做的是:
<xsl:template match="core[memberId='0']/address[type='PRIMARY']">
<fo:etc..
</xsl:template>