x路径不计算第二个元素

时间:2013-01-08 04:49:27

标签: html xml xslt

我有一个xpath设置来搜索第一个和第二个标题但是第二个标题出现空白,我猜这一定很容易但是我试过多次更改路径名称,我似乎无法解决它,我然后使用a来查找我的xml文件是否可能不正确,但我的循环似乎很容易找到。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="blogschema.xsd"
exclude-result-prefixes="foo">
<xsl:output method ="html" indent ="no"/> 
<xsl:template match="/">
<html>
<link rel ="stylesheet" type="text/css" href="blogStyle.css"/>
    <body>
    <ul class="menu">
    <li><a href="#" class ="Part 1"><xsl:value-of select="//foo:Heading[1]"/> </a></li>
    <li><a href="#" class ="Part 2"><xsl:value-of select="//foo:Heading[2]"/></a></li>
    </ul>






        <div id="heading">

        <xsl:for-each select="//foo:Entry">
        <!--<xsl:sort select="Heading"/> -->


        <div class ="topNavigation"><a href="#home"><h3><xsl:value-of    select="foo:Heading"/></h3></a></div>

        </xsl:for-each>
        <div class ="panes">




        </div>

        </div>
        <div id ="blogpicture">
            <div class="picture">
                <div id="headerTitle"><h2><xsl:value-of        select="//foo:Title"/></h2></div>
                </div>
                </div>


    </body>
    </html>
</xsl:template>
</xsl:transform>

我试图获得一个菜单,但我现在所有的东西都是菜单的第1部分,在for循环中我可以得到第2部分。另一种选择可能是坚持使用循环,并且因为我正在循环变化在循环期间以某种方式的类(包含类id)                                   我的博客

<Entry>
    <Heading id="101">Part 1</Heading>  
    <body>
        <text>something interesting</text>
        <pictures>pictures in the body</pictures>
        <videos>Videos in the body</videos>
    </body>
    <labels>Seperate labels with commas</labels>
    <date> 20121119</date>
    <location>The location the blog was published</location>

</Entry>

<Entry>
    <Heading id="102">Part 2</Heading>
        <body>
            <text>something</text>
            <pictures>pictures in the body</pictures>
            <videos>Videos in the body</videos>
        </body>
    <labels>Seperate labels with commas</labels>
    <date> 2012-11-26Z</date>
    <location>The location the blog was published</location>

</Entry>


<author>me</author>

我希望这是有道理的 当前进入菜单u的输出是第1部分,然后是“”,其中我的意思是第2部分。然而,xsl中的每个循环都会带来第1部分和第2部分标题

1 个答案:

答案 0 :(得分:3)

这个怎么样:

<li><a href="#" class ="Part 1"><xsl:value-of select="//foo:Entry[1]/foo:Heading"/> </a></li>
<li><a href="#" class ="Part 2"><xsl:value-of select="//foo:Entry[2]/foo:Heading"/></a></li>

或者,这也应该有效:

<li><a href="#" class ="Part 1"><xsl:value-of select="(//foo:Heading)[1]"/> </a></li>
<li><a href="#" class ="Part 2"><xsl:value-of select="(//foo:Heading)[2]"/></a></li>

来自全能的XPath spec

  

///descendant-or-self::node()/的缩写。例如,//para/descendant-or-self::node()/child::para的缩写,因此将选择文档中的任何para元素(因为文档元素节点,因此//para将选择作为文档元素的para元素是根节点的子节点); div//paradiv/descendant-or-self::node()/child::para的缩写,因此会选择div子的所有para后代。

     

注意:位置路径//para[1] 与位置路径/descendant::para[1]的含义相同。后者选择第一个后代para元素;前者选择所有后代的para元素,这些元素是他们父母的第一个孩子。