Ваше выражение XPath
/process/documents[1]/document[1]/
неверно из-за последнего символа "/": оно должно дать вам синтаксическую ошибку.
Если вы измените его на
/process/documents[1]/document[1]
затем вы выбираете первого document
дочернего элемента первого documents
дочернего элемента process
. Вы не выбираете «каждый документ, независимо от того, сколько их», как вы предлагаете в своем вопросе.
Если вы измените его на
/process/documents[1]/document
, то теперь выбираются все document
элементов.
Если вы хотите поместить xsl: если внутри xsl: for-each, то вы можете. Но помните, что элемент контекста внутри xsl: for-each является узлом, выбранным xsl: for-each. Поэтому написание
<xsl:for-each select="/process/documents[1]/document">
<xsl:if test="/process/documents[1]/document/titel = 'xyz'">
не будет полезным, поскольку xsl:if
начинается с root документа XML, а не с выбранного в данный момент элемента document
. Вместо этого вам нужен относительный путь:
<xsl:for-each select="/process/documents[1]/document">
<xsl:if test="titel = 'xyz'">
Но если все тело xsl:for-each
является инструкцией xsl:if
, то лучше добавить предикат в xsl:for-each/@select
, например, так: :
<xsl:for-each select="/process/documents[1]/document[titel = 'xyz']">