我现在非常熟悉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-of
和apply-templates match=
之间尝试了许多不同的XPATH配置,但就我而言,我不能只回来一次。
根据我的理解,"//Passenger"
将针对任何<Passenger>
节点,并且仅针对该确切名称后面的节点。我已经超过了我的XML,比我愿意承认的次数多,而且肯定没有第二份。
同样控制包含apply-templates
的模板的模板也未被调用两次,位于<xsl:template match="/">
内。
为什么这与我预期会发生的事情不一致的任何帮助或解释?
一如既往地感谢, 亚历克斯。
编辑:奇怪的是,当我添加另一个片段时,它会转到3 MR MANLY DUDE
。这是否表明它实际上是以某种方式在XML中提取某些东西?