2013-06-10 3 views
3

Я хочу вставить имена всех узлов и их значений в xml. Проблема, с которой я столкнулась, - это один из первых дочерних узлов, не имеющих каких-либо значений, назначенных ей, но у нее есть дочерние узлы, которые имеют значения. Если я просто использую подстановочный знак, он просто выбирает все дочерние узлы на этом уровне, включая тот, у которого нет назначенного ему значения. Есть ли способ использовать подстановочный знак только для выбора дочерних узлов, у которых нет самих узлов для детей?XSLT: Как выбрать все узлы, у которых нет дочерних узлов

ответ

9

предикат [not(node())] верно для всех узлов без дочерних узлов, но это включает в себя текст и узлы комментариев, возможно, вы хотите [not(*)], которая просто правда этих узлов без элемента детей.

<xsl:for-each select="//*[not(*)]"> 
    <xsl:value-of select="concat('&#10;',name(),': ',."/> 
</xsl:for-each> 

поэтому перебирает все листовые элементы, не имеющие дочерние элементов и печатает имя элемента и содержание

+1

Спасибо, это сработало отлично. – OstrichProjects

+3

@ user2472274: Пожалуйста, нажмите галочку, чтобы «принять» ответ Дэвида. – LarsH

Смежные вопросы