Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html xml和xsl能否在xml节点上循环生成菜单?_Html_Xml_Xslt - Fatal编程技术网

Html xml和xsl能否在xml节点上循环生成菜单?

Html xml和xsl能否在xml节点上循环生成菜单?,html,xml,xslt,Html,Xml,Xslt,我开始使用XSL和XML进行开发,以派生HTML。我让troubel为此获得一个工作XSLT模板 我一直在尝试将适当的XSL应用于表示网站菜单的结构化XML数据结构 结果应类似于: 作为数据源的XML是: <?xml version="1.0" encoding="utf-8" ?> <SMARTSMenu> <Menu Type="Home" Caption="Home"></Menu> <Menu Type="Bankin

我开始使用XSL和XML进行开发,以派生HTML。我让troubel为此获得一个工作XSLT模板

我一直在尝试将适当的XSL应用于表示网站菜单的结构化XML数据结构

结果应类似于:

作为数据源的XML是:

<?xml version="1.0" encoding="utf-8" ?>
<SMARTSMenu>
    <Menu Type="Home" Caption="Home"></Menu>
    <Menu Type="BankingFulfillment" Caption="Initiate Request"></Menu>
    <Menu Type="Drafts" Caption="Drafts"></Menu>
    <Menu Type="SearchManageCase" Caption="Search Requests"></Menu>
    <Menu Type="PendingApproval" Caption="Pending Approval"></Menu>
    <Menu Type="MyWorkQueue" Caption="My Work Queue"></Menu>
    <Menu Type="ManagementTools" Caption="Management Tools"></Menu>
    <Menu Type="Administration" Caption="Administration">

        <Menu Type="Administration" Caption="General Administration"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="Maintain Wire Reference"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="Maintain Associate Information"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="Maintain Reason for Claim"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="Maintain Request Information"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="Unlock Request"></Menu>
            <Menu URL="page1.html" Type="Administration" Caption="AuditReport"></Menu>
        </Menu>

        <Menu Type="Administration" Caption="Maintain Email">
            <Menu URL="page2.html" Type="Administration" Caption="Maintain Email Template"></Menu>
            <Menu URL="page2.html" Type="Administration" Caption="Maintain Template to Request Association"></Menu>
        </Menu>

        <Menu Type="Administration" Caption="SR Remedy">
            <Menu URL="page3.html" Type="Administration" Caption="Remedy SR"></Menu>
            <Menu URL="page3.html" Type="Administration" Caption="Move SR to Letter Queue"></Menu>
        </Menu>
</SMARTSMenu>

我试图基于以下HTML生成XSLT:

<div class="maiNav meganav">
    <nav>
        <ul class="maiNav-nav horizontal">
            <li id="navHome"><a href="#">Home</a></li>
            <li id="navInitiate" class="dropdown meganav-fullwidth actve"><a class="dropdown-toggle" href="#" data-toggle="dropdown">Initiate Request</a></li>
            <li id="navDrafts"><a href="#">Drafts</a></li>
            <li id="navSearch"><a href="#">Search Requests</a></li>
            <li id="navPending" class="disabled"><a href="#">Pending Approval</a></li>
            <li id="navTools"><a href="#">Management Tools</a></li>
            <li id="navAdmin" class="last dropdown meganav-fullwidth"><a class="dropdown-toggle" href="#" data-toggle="dropdown">Administration<b class="caret"></b></a>
                <ul class="dropdown-menu temp">
                    <li>
                        <div class="meganav-content">
                            <div class="row">
                                <div class="grid-12">
                                    <h3 class="dropdown-header">General Administration</h3>
                                    <ul>
                                        <li><a href="#">Maintain Wire Reference</a></li>
                                        <li><a href="#">Maintain Associate Information</a></li>
                                        <li><a href="#">Maintain Reason for Claim</a></li>
                                        <li><a href="#">Maintain Request Information</a></li>
                                        <li><a href="#">Unlock Request</a></li>
                                        <li><a href="#">AuditReport</a></li>
                                    </ul>
                                </div>
                                <div class="grid-12">
                                    <h3 class="dropdown-header">Maintain Email</h3>
                                    <ul>
                                        <li><a href="#">Maintain Email Template</a></li>
                                        <li><a href="#">Maintain Template to Request Association</a></li>
                                    </ul>
                                </div>
                                <div class="grid-12">
                                    <h3 class="dropdown-header">SR Remedy</h3>
                                    <ul>
                                        <li><a href="#">Remedy SR</a></li>
                                        <li><a href="#">Move SR to Letter Queue</a></li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                    </li>
                </ul>
            </li>
        </ul>
    </nav>
</div>

    • 一般行政
      维护电子邮件
      SR补救措施
我的XSLT看起来像这样(正在进行的工作):


    • 一般行政
        • ff
      维护电子邮件
      SR补救措施

下面的XSLT应该可以满足您的需求。有三个问题:

  • 您的输入XML中似乎有一个错误:行

    <Menu Type="Administration" Caption="General Administration"></Menu>
    

    是的,这是一个非常典型的XSLT应用程序。您有XSLT吗?它基本上是整个html,XSLT用作文本替换。我希望使它更智能,并在顶级节点和子节点之间循环。您的意思是,您的XSLT当前完全是静态的,不依赖于源XML?我使用类似的方法来获取完整html框架中的XML数据点:
  • 我的解决方案对您有效吗?
    <Menu Type="Administration" Caption="General Administration"></Menu>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet 
        version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    
      <xsl:template match="SMARTSMenu">
        <div class="maiNav meganav">
          <nav>
            <ul class="maiNav-nav horizontal">
    
              <!-- top layer -->
              <xsl:for-each select="Menu">
                <li id="nav{@Caption}">
                  <a href="#"><xsl:value-of select="@Caption"/></a>
                  <xsl:if test="Menu">
                    <ul class="dropdown-menu temp">
    
                      <!-- second layer -->
                      <xsl:for-each select="Menu">
                        <li>
                          <div class="meganav-content">
                            <div class="row">
                              <div class="grid-12">
                                <h3 class="dropdown-header"><xsl:value-of select="@Caption"/></h3>
                                <xsl:if test="Menu">
                                  <ul>
    
                                    <!-- third layer -->
                                    <xsl:for-each select="Menu">
                                      <li><a href="#"><xsl:value-of select="@Caption"/></a></li>
                                    </xsl:for-each>
                                  </ul>
                                </xsl:if>
                              </div>
                            </div>
                          </div>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </xsl:if>
                </li>
              </xsl:for-each>
            </ul>
          </nav>
        </div>
      </xsl:template>
    </xsl:stylesheet>