xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Данные и логика в XML, вопросы по стилю


Автор Сообщение
Ruslan Popov
Гость




[13596] Пт Фев 27, 2009 12:35
Данные и логика в XML, вопросы по стилю
Доброе время суток.

У меня есть XML вида:

Код:


    <foreach>
      <list>
   <repgroup name="ig">
     <table name="ig_document"/>
     <table name="ig_fio"/>
     <table name="ig_person"/>
   </repgroup>
   <repgroup name="slv"/>
     <table name="slv_city"/>
     <table name="slv_street"/>
      </list>
      <run schema="cdb" applyto="repgroup">
   <create_master_repgroup/>
      </run>
      <run schema="cdb" applyto="table">
   <create_master_repobject username="${user_name}"/>
   <generate_replication_support username="${user_name}"/>
      </run>
      <run schema="cdb" applyto="repgroup">
   <resume_master_activity/>
      </run>
    </foreach>



Требуется обработать каждый элемент <repgroup> действиями, которые определены элементами <run>, после списка.

Пытаюсь делать следующее:

Код:


  <xsl:template match="foreach">
    <xsl:for-each select="list/*">
      <xsl:value-of select="@name"/>
      <xsl:text>&#xA;</xsl:text>
      <xsl:apply-templates select="ancestor::foreach/run"/>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="run">
    <xsl:if test="contains(@schema, $schema_version) or @schema = 'common'">
      <xsl:if test="string-length(@applyto) > 0">
   <xsl:text>applyto=</xsl:text>
   <xsl:value-of select="@applyto"/>
   <xsl:text>&#xA;</xsl:text>
   <xsl:copy-of select="./*"/>
      </xsl:if>
      <xsl:apply-templates select="./*"/>
    </xsl:if>
  </xsl:template>
  <xsl:template match="create_master_repgroup">
    <xsl:variable name="user" select="ancestor::user/@name"/>
    <xsl:text>dbms_repcat.create_master_repobject</xsl:text>
    <!-- не придумал как -->
  </xsl:template>



Как лучше реализовать то, что я задумал???
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13600] Вс Мар 01, 2009 17:40

Не совсем понятно, что требуется.
Желаемый результат запости, поглядим тогда.
Гость





[13602] Пн Мар 02, 2009 13:08

В цикле для каждого корневого элемента в <list> выполнить последовательно элементы <run>.
Такие образов стиль должен вызвать последовательно каждый <run>, передавая им текущий элемент из <list>.
Ruslan Popov
Гость




[13603] Пн Мар 02, 2009 13:25

т.е. я хочу получить такое:

Код:


create_master_repgroup ig
create_master_repobject ig_document
generate_replication_support ig_document
create_master_repobject ig_fio
generate_replication_support ig_fio
create_master_repobject ig_person
generate_replication_support ig_person
resume_master_activity ig
create_master_repgroup slv
create_master_repobject slv_city
generate_replication_support slv_city
create_master_repobject slv_street
generate_replication_support slv_street
resume_master_activity slv