如何在XSLT中获得以下兄弟

时间:2012-04-20 12:35:58

标签: xml xslt xpath

我是XSLT的新手,这是我的XML:

<projects>
    <project>
        <number>1</number>
        <title>Project X</title>
    </project>
    <project>
        <number>2</number>
        <title>Project Y</title>
    </project>
    <project>
        <number>3</number>
        <title>Project Z</title>
    </project>
</projects>

如果我有一个项目并希望得到它后面的兄弟,我该怎么办呢?

此代码似乎对我不起作用:

/projects[title="Project X"]/following-sibling

1 个答案:

答案 0 :(得分:28)

这实际上是一个完全的XPath问题。

使用

/*/project[title = 'Project X']/following-sibling::project[1]

这将选择任何Project元素中的任何第一个兄弟Project,它是XML文档中顶部元素的子元素,并且至少是其中一个title的字符串值children是字符串"Project X"

基于XSLT的验证:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
      "/*/project[title = 'Project X']/following-sibling::project[1]"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<projects>
    <project>
        <number>1</number>
        <title>Project X</title>
    </project>
    <project>
        <number>2</number>
        <title>Project Y</title>
    </project>
    <project>
        <number>3</number>
        <title>Project Z</title>
    </project>
</projects>

评估XPath表达式并将正确选择的元素复制到输出中:

<project>
   <number>2</number>
   <title>Project Y</title>
</project>