【问题标题】:How to get the following sibling in XSLT如何在 XSLT 中获取以下同级
【发布时间】:2012-04-20 12:35:57
【问题描述】:

我对 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

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

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

    使用

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

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

    基于 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>
    

    【讨论】:

    • 这似乎在 xsl:for-each 循环中不起作用。这怎么能循环工作?
    • @basZero,请准确地说“这个”和“不起作用”。在没有看到您的代码和必须实现的定义的情况下,期望任何人都能够理解评论并提供有用的回复是不现实的。我建议您提出一个单独的新 SO 问题,正确格式化 XML 文档和 XSLT 代码,定义想要的结果并提供实际结果。让我们避免猜测并节省大家的时间。
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多