0

我设置了一个 xpath 来搜索第一个和第二个标题,但是第二个标题显示为空白,我猜这一定很容易,但是我尝试更改路径名很多次,但我似乎无法解决它,然后我使用了让每个人找出我的 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>

我希望这是有道理的,我当前进入菜单的输出是第 1 部分,然后是“”,表示我应该有第 2 部分。然而,xsl 中的 for each 循环带来了第 1 部分和第 2 部分的标题

4

1 回答 1

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 规范

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

注意:位置路径//para[1]与位置路径的含义不同/descendant::para[1]。后者选择第一个后代 para 元素;前者选择作为其父母的第一个 para 孩子的所有后代 para 元素。

于 2013-01-08T06:37:40.680 回答