Во-первых, вы используете xsl:value-of
, который возвращает только текстовое значение узла.Вы должны использовать xsl:copy-of
здесь, чтобы скопировать сами узлы.
Кроме того, в XSLT 1.0, если вы используете xsl:value-of
на нескольких узлах, он вернет значение только первого (поэтомуchild:*
возвращает только первое при использовании в xsl:value-of
).Обратите внимание, что child::node()
ничего не возвращает, так как node()
также выбирает текстовые узлы, и поэтому он выберет узел пробела перед Name1
.(Если бы вы добавили xsl:strip-space
к вашему узлу, вы бы получили результаты).
Итак, вы должны делать это ...
<xsl:copy-of select="Name/*" />
(Также обратите внимание, что XSLTчувствителен к регистру, поэтому name
фактически не выберет Name
)
Посмотрите, как это работает здесь ... http://xsltfiddle.liberty -development.net / gWvjQeZ
Обратите внимание, я предполагаю, что Name6
должно быть в ваших ожидаемых результатах тоже.Но если вы действительно хотите исключить последний узел, вы можете сделать это ...
<xsl:copy-of select="Name/*[position() != last()]" />
Или это, чтобы исключить узел с данным именем
<xsl:copy-of select="Name/*[not(self::Name6)]" />