XSL捕获由特定父节点的子节点或兄弟节点组成的所有导航

时间:2013-06-06 18:42:33

标签: xslt-1.0

我希望有人能够帮助我解决这个问题我一直在试图解决这个问题 - 通过stackoverflow阅读今天更好的部分和昨天尝试的事情,但不仅仅是那里。

这是我的xml,它是从cms生成的。

<Navigation Type="Children" Name="LeftNavigation" label="Left Navigation">
      <Page ID="x13" URL="x13.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="Cars" />
        <Page ID="x12" URL="x12.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-1">
        <Page ID="x27" URL="x27.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-2" />
        <Page ID="x28" URL="x28.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-3" />
        <Page ID="x31" URL="x31.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-4" />
      </Page>
      -
      <Page ID="x14" URL="x14.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="Books">
        <Page ID="x32" URL="x32.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-2" />
        <Page ID="x33" URL="x33.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-3" />
        <Page ID="x34" URL="x34.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-4" />
        <Page ID="x35" URL="x35.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-5" />
        <Page ID="x36" URL="x36.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-6" />
        <Page ID="x37" URL="x37.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-7" />
        <Page ID="x38" URL="x38.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-8" />
        <Page ID="x39" URL="x39.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-9" />
        <Page ID="x40" URL="x40.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-10" />
        <Page ID="x41" URL="x41.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="subsection-11" />
      </Page>
      <Page ID="x15" URL="x15.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="Clothes" />
      -
      <Page ID="x47" URL="x47.xml" Schema="ContentPage" Locale="en-us" CategoryIds="" Name="Toys">
        <Page ID="x49" URL="x49.xml" Schema="ContentPage" Locale="en-us"  CategoryIds="" Name="subsection-1" />
        <Page ID="x48" URL="x48.xml" Schema="ContentPage" Locale="en-us"  CategoryIds="" Name="subsection-2" />
      </Page>
    </Navigation>

我正在尝试做的是创建一个左侧导航,仅列出其子级或该父级的兄弟姐妹。

所以我一直在尝试这样的事情:

<xsl:variable name="currentPage">
    <xsl:value-of select="//ContentPage/@ID"/>
  </xsl:variable>

首先,我创建了一个变量,可以找到我的位置并获取属性ID。

<xsl:template name="navigation">
    <ul id="oc-left-nav">
      <xsl:apply-templates select="//@ID='$currentPage' | parent::()" />
    </ul>
  </xsl:template>

所以这部分是我试图说:选择ID等于我的变量的页面,或者如果你是兄弟姐妹,那么列出该父母下的所有兄弟姐妹。但正如你所看到的,我不知道该怎么写。

  <xsl:template match="//@ID[.='$currentPage'] | parent::()">
    <xsl:for-each select="Page">
      <li class="oc-navlink">
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="@URL"/>
          </xsl:attribute>
          <xsl:value-of select="@Name"/>
        </a>
      </li>
    </xsl:for-each>
  </xsl:template>

在一天结束时,我需要一个动态列表,列出所有孩子相对于你父母的后代。那么这里希望。我会继续瞎扯。

1 个答案:

答案 0 :(得分:0)

我无法理解你想要做什么,但我当然可以为你做一些观察:

你说&#34;所以这部分是我试图说:选择页面...&#34;

后跟模板匹配,返回@ID节点...

xsl:template match =&#34; // @ ID ..

为孩子做一个好孩子&#34; Page&#34; &#34; @ ID&#34;的元素属性肯定不会返回。 &#34; @ ID&#34;属性没有孩子。

其次,将变量currentPage的值设置为// ContentPage / @ ID。我甚至没有在您的示例XML中看到元素ContentPage。除非您没有在此处显示所有相关内容,否则此变量将为空。

我想我知道你想要输出什么,但也许你可以发布你想要的东西,所以我们不必猜测。