Подтвердить что ты не робот

Как получить следующий родной брат в XSLT

Я новичок в 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
4b9b3361

Ответ 1

Это действительно вопрос XPath.

Использование

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

Это выбирает любой следующий следующий sibling Project любого элемента Project, который является дочерним элементом верхнего элемента в документе XML, а строковое значение хотя бы одного из его дочерних элементов title - это строка "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>