我有以下的XML。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<new>
This is content <star.page>21</star.page> with star pages <star.page>22</star.page> inside it.
</new>
<main>
This is main content
</main>
</root>
在这里,我想要打印以下为main
的号码,即只打印22
但不打印21。
我希望从star.page
模板完成此操作。就像在这里一样,21
之后是22
(两者都是star.page
),我希望打印star.page
值,其中main
之后有star.page
且没有中间的其他21
。我在main
和star.page
之间的输入中有另一个22
但不在main
和22
之间。所以我想打印21
但不打印template match="star.page"
。此模板必须在root
内完成,但不能在{{1}}内完成。
请让我知道我哪里出错了以及如何解决。
答案 0 :(得分:1)
试试这个:
XML:
<root>
<new>
This is content <star.page>21</star.page> with star pages <star.page>22</star.page> inside it.
</new>
<main>
This is main content
</main>
</root>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="star.page">
<xsl:if test="following::*[name()='main'] and not(following::*[name()='star.page'])">
<xsl:text>Last page is </xsl:text><xsl:value-of select="."/>
</xsl:if>
</xsl:template>
<xsl:template match="*[not(name()='star.page')]/text()"/>
</xsl:stylesheet>
输出:
Last page is 22
答案 1 :(得分:0)
一种方法是在preceding
导航时使用main
,并找到最后star.page
,而不考虑其余结构:
<xsl:value-of select="(/root/main/preceding::star.page)[position()=last()]"/>