На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL
  
> xsl преобразование , обход узлов-предков
    есть xml
    ExpandedWrap disabled
      ..
      <some>
        <base>
          <level1>
            <level2>
               <myNode/>          
            </level2>
          </level1>
        </base>
      </some>
      ..


    кусок xsl
    ExpandedWrap disabled
       <xsl:template match="myNode">
         <xsl:value-of select="что-то"/>
       </xsl:template>


    это "что-то" должно вывести
    ExpandedWrap disabled
      level1-level2-myNode

    или хотя бы
    ExpandedWrap disabled
      myNode-level1-level2


    то есть все имена узлов до base

    как это сделать, если это возможно?

    Добавлено
    Цитата begemot @
    или хотя бы
    myNode-level1-level2

    имелось ввиду


    ExpandedWrap disabled
        myNode-level2-level1
      А тебе надо получить только имена узлов-предков? И всегда ли известно, имена скольких предков надо вывести?
      Если нужна именно такая строка level1-level2-myNode и известна структура xml, то можно просто:
      ExpandedWrap disabled
        <xsl:value-of select="concat(name(parent::node()/parent::node() ), ' ', name(parent::node()), ' ',  name(.))"/>
      А если структура xml может меняться, то в общем случае надо использовать оси. Например, так можно получить
      имена всех предков текущего узла:
      ExpandedWrap disabled
        <xsl:variable name="parents" select="ancestor::node()"/>
        <xsl:for-each select="$parents">            
          <xsl:value-of select="name(.)"/>
        </xsl:for-each>
        спасибо.
          Вот я тут немного наропал тебе:
          На сколько я помню именно так всё.

          child "дети" - все дочерние узлы контекстного узла
          descendant "потомки" - потомки контекстного узла, его потомки и т.д.
          parent "родитель" - непосредственный родитель контекстного узла
          ancestor "предки" - предок контекстного узла, предок предка и т.д.
          following-sibling следующий узел того же уровня для контекстного узла
          preceding-sibling предыдущий узел того же уровня для контекстного узла
          following Все узлы, следующие после контекстного узла в порядке документа. Эта ось не содержит потомки контекстного узла, а также узлы атрибутов и пространства имен.
          preceding Все узлы, предшествующие контекстному в порядке документа. Эта ось не содержит предки контекстного узла, а также узлы атрибутов и пространства имен.
          attribute Узлы атрибутов контекстного узла
          namespace Узлы пространств имен контекстного узла
          self Контекстный узел
          descendant-or-self Объединение узла-потомка (descendant) и самого контекстного узла
          ancestor-or-self Объединение узла-предка (ancestor) и самого контекстного узла
            Magistr,
            спасиб, товарищ, я уже в принципе с Этим разобрался. Учусь потихоьку.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0244 ]   [ 15 queries used ]   [ Generated: 27.04.24, 17:25 GMT ]