我有一种情况,我在DataGrid中显示一些值(来自xml)。 为此,我有一个Display.xsl文件,我在其中定义了一些xml标记值。例如,“UserType”(“UserType”是XML标记,它必须显示为“User Type ='XML tag value'”),如下所示:
<xsl:call-template name="FormatTextData">
<xsl:with-param name="textValue" select="//UserType"/><!-- xml tag value-->
<xsl:with-param name="displayValue" select="';User Type='"/><!-- Display Value-->
</xsl:call-template>
这很好用。但问题是,同样我需要定义一个静态半动态的值。标记值为“UserRoleCollection.RoleName”,其中“UserRoleCollection”。将保持不变,但“RoleName”本质上是动态的,并将更改为RoleName1。 RoleName2,RoleName3 .....等。我的意思是没有角色会变种。
<xsl:call-template name="FormatTextData">
<xsl:with-param name="textValue" select="//UserRoleCollection.*"/><!-- xml tag value-->
<xsl:with-param name="displayValue" select="';User Role Collection.*='"/><!-- Display Value-->
</xsl:call-template>
那么如何以一种方式定义它以便可以一次性提供所有不同的角色?
我希望我对自己的问题很清楚。请为此建议一些解决方案。
进一步探讨:
我需要显示一个xml标签,比方说:XML标签是“UserName”,标签的值是“Aashu”。我必须将其显示为“User Name = Aashu”。 类似地,在Tag“UserRoleCollectio.RoleName”的情况下,没有值(RoleNames)不是常量(标签中的RoleName可以由Painter,Driver,Cook等替换,其中各自的值分别为Yes,No,Yes等)所以我可能必须在GRID中显示2/3 / ...或更多角色。 在生成XML时,我已经将其生成为“UserRoleCollection.RoleName(在点之后,它将针对每个XML标记进行更改,因为可能有多个角色)”。 现在我想显示相同的“User Role Collection.Painter = Yes”,User ROle Collection.Driver = No,并且像这样.............
<AUDITDATA>
<USERS>
<Domain>DOMAUDIT</Domain>
<UserName>Aashu</UserName>
<PassWord>m0eYN2VM</PassWord>
<Description>1234</Description>
<UserType>AdminOps</UserType>
<UserRoleCollection.Painter>YES</UserRoleCollection.Painter>
<UserRoleCollection.Driver>NO</UserRoleCollection.Driver>
<UserRoleCollection.Cook>YES</UserRoleCollection.Cook>
<!-- like this there may be more roles also.-->
</USERS>
</AUDITDATA>
我想在DataGrid列中将其显示为“Domain = DOMAUDIT,User Name = Aashu,Description = 1234,User Type = AdminOps,User Role Collection.Painter = YES,User Role Collection.Driver = NO,User Role Collection.Cook = YES ....等等。
我使用过XSLT文件。现在问题在于XML我可以获得10/100个角色和值,因此我无法在XSL文件中定义这些角色,因为我不确定在任何给定时间我可以获得多少角色。因此TAG的第一部分(UserRoleCollection。)很常见,我认为可能有一些方法可以在XSL文件中定义它.....如果有任何可能的解决方案,请提供帮助。
答案 0 :(得分:0)
您可以使用通用模板:
<xsl:template match="USERS">
<xsl:for-each select="*">
<xsl:value-of select="name()" />
<xsl:text>='</xsl:text>
<xsl:value-of select="." />
<xsl:text>'</xsl:text>
<xsl:if test="position() != last()">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>