如何为动态XML节点编写XSL标记

时间:2013-12-12 09:30:51

标签: xslt

这是我的XML:

<AUDITDATA>
  <USERS>
    <Domain>DOMAUDIT</Domain>
    <UserName>Aashu</UserName>
    <PassWord>m0eYN2VM</PassWord>
    <Description>1234</Description>
    <UserType>AdminOps</UserType>
    <UserRoles.Painter>YES</UserRoles.Painter>
    <UserRoles.Driver>NO</UserRoles.Driver>
    <UserRoles.Cook>YES</UserRoles.Cook>
    <!-- like this there may be more roles also.-->
  </USERS>
</AUDITDATA>

对于除“UserRoles。*”之外的XML标签,我已经使用了XSL代码来解决这个问题:

<xsl:template name="Users">

  <xsl:call-template name="FormatTextData">
    <xsl:with-param name="textValue" select="//UserName"/>
    <xsl:with-param name="displayValue" select="'User Name='"/>
  </xsl:call-template>

 <xsl:call-template name="FormatTextData">
    <xsl:with-param name="textValue" select="//PassWord"/>
    <xsl:with-param name="displayValue" select="',Password='"/>
  </xsl:call-template>

 <xsl:call-template name="FormatTextData">
    <xsl:with-param name="textValue" select="//Description"/>
    <xsl:with-param name="displayValue" select="',Description='"/>
  </xsl:call-template>

 <xsl:call-template name="FormatTextData">
    <xsl:with-param name="textValue" select="//UserType"/>
    <xsl:with-param name="displayValue" select="',User Type='"/>
  </xsl:call-template>    

</xsl:template>

这对其他标签工作正常,如何为UserRoles标签编写,因为你可以看到没有修复角色,我想通过XSL文件中的一个代码块来处理所有角色。

问题是,如何为XML标签定义XSL,其TagName不是静态的,或者只有一部分是静态的。

请帮忙

1 个答案:

答案 0 :(得分:0)

我并不真正关注您的XSL,但您可以通过以下方式选择所有UserRoles。*元素:

select="AUDITDATA/USERS/*[starts-with(name(), 'UserRoles.')]"