Ответ 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>