我需要这个XML的xslt动态菜单

时间:2012-12-26 07:03:57

标签: xml xslt

<xml>
  <HeaderMenu>
    <headerMenuId>1</headerMenuId>
    <headerMenuName>Enterprise</headerMenuName>
    <headerMenuSort>1</headerMenuSort>
    <subMenu>
      <subMenuId>1</subMenuId>
      <submenuname>Full fill ment </submenuname>
      <submenuDispayOrderId>1</submenuDispayOrderId>
      <PageSections>
        <pagesectionId>1</pagesectionId>
        <PageSecName>First Sub-Navigation</PageSecName>
        <PageSecDescription>Dummy</PageSecDescription>
        <PageSecDispayOrderId>1</PageSecDispayOrderId>
      </PageSections> 
    </subMenu> 
 </HeaderMenu> 
</xml>

我需要xslt动态菜单和来自此XML的2个级别的子菜单。 我需要这样的输出:

Enterprise
  ->Full fill ment 
             ->First Sub-Navigation

1 个答案:

答案 0 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/xml/HeaderMenu">
  <xsl:value-of select="headerMenuName" />
  <xsl:apply-templates select="subMenu" />
</xsl:template>

<xsl:template match="subMenu">
  -> <xsl:value-of select="submenuname" />
  <xsl:apply-templates select="PageSections" />
</xsl:template>

<xsl:template match="PageSections">
    -> <xsl:value-of select="PageSecName" />
</xsl:template>

</xsl:stylesheet>

XSLT是一种声明性语言:您不必使用条件或循环。始终尝试使用apply-templates代替xsl:for-each和xpath条件而不是xsl:if。 请注意,如果您的XML文件结构是递归的,这将变得非常强大。你的代码非常通用而且很短。