在XSLT的输出中返回重复的结果

时间:2014-09-25 14:03:48

标签: xml xslt xpath

我现在非常熟悉XSLT的范例和机制,为此我要感谢这个社区。您已经帮助我看到了我过去使用XSLT编写方法的一些谬误(并且一起编码!)。

然而,XPATH对我来说真的很新。我发现它的不同之处在于能够立即将我想要的内容从XML中拉出来,变得奇怪或没有结果。

今天是我当前的问题。我的XML中包含以下代码段:

<Passenger>
    <PassengerName>
    <Title>MR</Title>
    <FirstName>MANLY</FirstName>
    <LastName>DUDE</LastName>
    </PassengerName>
</Passenger>

以上内容可以在XML中重复多次,但我可以向您保证,在这种情况下它不会。

我正在使用以下XSLT,每次遇到新的“Passenger”节点时都要调用模板。

<!-- List through each Passenger for their Name details here -->
<xsl:apply-templates select="//Passenger" mode="text"/>

以下是整个模板:

<xsl:template match="Passenger" mode="text">
    <xsl:value-of select="PassengerName/Title"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="PassengerName/FirstName"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="PassengerName/LastName"/>
</xsl:template>

但是这会输出:

MR MANLY DUDE
MR MANLY DUDE

我在value-ofapply-templates match=之间尝试了许多不同的XPATH配置,但就我而言,我不能只回来一次。

根据我的理解,"//Passenger"将针对任何<Passenger>节点,并且仅针对该确切名称后面的节点。我已经超过了我的XML,比我愿意承认的次数多,而且肯定没有第二份。

同样控制包含apply-templates的模板的模板也未被调用两次,位于<xsl:template match="/">内。

为什么这与我预期会发生的事情不一致的任何帮助或解释?

一如既往地感谢, 亚历克斯。

编辑:奇怪的是,当我添加另一个片段时,它会转到3 MR MANLY DUDE。这是否表明它实际上是以某种方式在XML中提取某些东西?

0 个答案:

没有答案