xslt导航将模板应用于子节点

时间:2016-03-30 10:46:53

标签: xml xslt xpath

我有一个像这样的XMl文件

Picasso.with(context).load("image url").error(R.drawable.bg_480_800).placeholder(R.drawable.loading_img).into(holder.imageURL);

我想从xml

上面得到这样的结果
<Page ID="28" AreaID="1" MenuText="Om IAI" Href="Default.aspx?ID=28" FriendlyHref="/da-dk/om-iai.aspx" Allowclick="True" Hidden="False" ShowInSitemap="True" ShowInLegend="True" AbsoluteLevel="1" RelativeLevel="1" Sort="1" LastInLevel="False" InPath="True" ChildCount="2" class="L1_Active" Active="True" IsPagePasswordProtected="False" IsPageUserProtected="False" CanAccessPasswordProtectedPage="False" CanAccessUserProtectedPage="True">
    <Page ID="29" AreaID="1" MenuText="Underside med langt navn" Href="Default.aspx?ID=29" FriendlyHref="/da-dk/om-iai/underside-med-langt-navn.aspx" Allowclick="True" Hidden="False" ShowInSitemap="True" ShowInLegend="True" AbsoluteLevel="2" RelativeLevel="2" Sort="1" LastInLevel="False" InPath="False" ChildCount="0" class="L2" Active="False" IsPagePasswordProtected="False" IsPageUserProtected="False" CanAccessPasswordProtectedPage="False" CanAccessUserProtectedPage="True" />
    <Page ID="30" AreaID="1" MenuText="SubPage 2" Href="Default.aspx?ID=30" FriendlyHref="/da-dk/om-iai/subpage-2.aspx" Allowclick="True" Hidden="False" ShowInSitemap="True" ShowInLegend="True" AbsoluteLevel="2" RelativeLevel="2" Sort="2" LastInLevel="True" InPath="False" ChildCount="0" class="L2" Active="False" IsPagePasswordProtected="False" IsPageUserProtected="False" CanAccessPasswordProtectedPage="False" CanAccessUserProtectedPage="True" />
  </Page>

我的xslt模板看起来像这样

<ul>
   <li>
     <a>level 1</a>
       <nav>
          <div><ul><li><a>level 2</a></li></ul></div>
          <div><ul><li><a>level 2</a></li></ul></div>
       </nav>
   </li>
</ul>

基本上我不确定如何在div和ul元素中包装每个2级项目,我也在寻找递归方法,所以它也可以处理2级下的3级。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

在您的XSLT中,您调用名为MegaMenu的命名模板,该模板未在其他位置显示。我不确定这是做什么的,但我认为要解决您当前的问题,您可以使用子页面的xsl:for-each,在其中创建div标记,然后递归调用&#34;页&#34;模板。

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="Page">
        <xsl:param name="depth" select="1"/>
        <ul>
            <li>
                <a href="{@FriendlyHref}">
                    <xsl:text>Level </xsl:text>
                    <xsl:value-of select="$depth" />
                    <xsl:text> - </xsl:text>
                    <xsl:value-of select="@MenuText" disable-output-escaping="yes"/>
                </a>
                <xsl:if test="Page">
                    <nav>
                        <xsl:for-each select="Page">
                            <div>
                                <xsl:apply-templates select=".">
                                    <xsl:with-param name="depth" select="$depth + 1" />
                                </xsl:apply-templates>
                            </div>
                        </xsl:for-each>
                    </nav>
                </xsl:if>
            </li>
        </ul>
    </xsl:template>
</xsl:stylesheet>