这是我的XML
<SESSION MAPPINGNAME ="example_mapping_name" DESCRIPTION ="here is some data">
<SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name1" TRANSFORMATIONTYPE ="Target Definition">
</SESSTRANSFORMATIONINST>
<SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name2" TRANSFORMATIONTYPE ="Source Definition">
</SESSTRANSFORMATIONINST>
<SESSTRANSFORMATIONINST TRANSFORMATIONNAME ="name3" TRANSFORMATIONTYPE ="Lookup Procedure">
</SESSTRANSFORMATIONINST>
这是我的XSL
<xsl:template match="SESSION">
<xsl:value-of select="SESSTRANSFORMATIONINST[count(@TRANSFORMATIONTYPE !='Lookup Procedure')]" />
<tr>
<td class="mapping"><xsl:value-of select="@MAPPINGNAME" /> (<xsl:value-of select="@DESCRIPTION" />)</td>
<td class="source-definition"><xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Source Definition']"/></td>
<td class="source-tables"><xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Source Qualifier']/ATTRIBUTE[@NAME = 'Sql Query']" /> </td>
<td><xsl:apply-templates select="SESSIONEXTENSION[@TRANSFORMATIONTYPE = 'Target Definition']" /></td>
<td><xsl:value-of select="ATTRIBUTE[@NAME = 'Parameter Filename']/@VALUE" /></td>
</tr>
</xsl:template>
我已经从XML中留下了一些细节,但希望你能够了解它的外观。我试图从会话中提取映射名称(以及来自SESSTRANSFORMATIONINST的其他属性),但仅限于SESSION不包含查找过程的SESSTRANSFORMATIONINST TRANSFORMATIONTYPE的情况。
我认为使用一种方法可能是一个很好的方法。这将计算查找过程在TRANSFORMATIONTYPE中出现的次数,如果大于0,则不会提取数据。
我对XSL很新,所以不确定如何编码。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
这里的一个问题是您似乎试图同时做两件事:获取会话名称和会话中的值。这些应该是两种不同的操作。
根据您提供给我们的内容,很难准确地告诉您需要做什么,但这可能是基于以下几点:
<!-- in a template somewhere -->
<xsl:apply-templates select="POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION" />
<xsl:template match="SESSION">
<outputSession id="{ @NAME }">
<xsl:apply-templates select="SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE != 'oranges']" />
</outputSession>
</xsl:template>
<xsl:template match="SESSTRANSFORMATIONINST">
<outputInst>
<xsl:copy-of select="@*" />
</outputInst>
</xsl:template>
答案 1 :(得分:0)
如果您打算使用<SESSION>
决定是否显示<xsl:if test="count(SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Lookup Procedure']) = 0">
的属性值,则需要修改条件,如下所示。
@TRANSFORMATIONTYPE = Lookup Procedure
这将检查0
节点的<SESSIONTRANSFORMATIONINST>
计数是否为0
。如果计数为<xsl:if>
,则会处理<xsl:template match="SESSION">
<xsl:if test="count(SESSTRANSFORMATIONINST[@TRANSFORMATIONTYPE = 'Lookup Procedure']) = 0">
<tr>
...
</tr>
</xsl:if>
</xsl:template>
中的代码。
模板可以修改如下。
this.allStatisticsRef = afDatabase.list(`data/users/${this.currentUserID}/statistics`);
this.allStatisticData = this.allStatisticsRef.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});