Help: Как добавить элемент не меняя остальной структуры?
От: lkv512 Россия  
Дата: 09.09.05 02:41
Оценка:
на вход подается документ вида:
<a_1>
  <a_n>
    <id>42</id>
    <b_1>
      <b_n>..</b_n>
    </b_1>
  </a_n>
</a_1>

если значение ID=42 то, выходной документ должен быть такой
<a_1>
  <a_n>
    <id>42</id>
    <b_1>
      <ADDING>Hello, World!!!</ADDING>
      <b_n>..</b_n>
    </b_1>
  </a_n>
</a_1>

в случае других значений ID документ должен остаться неизменным.

Надеюсь на вашу помощь. Заранее спасибо всем откликнувшимся!
Re: Help: Как добавить элемент не меняя остальной структуры?
От: Other Sam Россия  
Дата: 09.09.05 02:47
Оценка:
Здравствуйте, lkv512, Вы писали:

L>на вход подается документ вида:

L>
L><a_1>
L>  <a_n>
L>    <id>42</id>
L>    <b_1>
L>      <b_n>..</b_n>
L>    </b_1>
L>  </a_n>
L></a_1>
L>

L>если значение ID=42 то, выходной документ должен быть такой
L>
L><a_1>
L>  <a_n>
L>    <id>42</id>
L>    <b_1>
L>      <ADDING>Hello, World!!!</ADDING>
L>      <b_n>..</b_n>
L>    </b_1>
L>  </a_n>
L></a_1>
L>

L>в случае других значений ID документ должен остаться неизменным.

L>Надеюсь на вашу помощь. Заранее спасибо всем откликнувшимся!

L>

L>

Вот так примерно
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dt="urn:schemas-microsoft-com:datatypes">

<xsl:output method="xml" encoding="windows-1251" indent="no"/>

<xsl:template match="/ | @* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="a_n[id = '42']/b_1">
  <b_1>
    <ADDING>Hello, World!!!</ADDING>
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </b_1>
</xsl:template>

</xsl:stylesheet>
Re[2]: Help: Как добавить элемент не меняя остальной структу
От: lkv512 Россия  
Дата: 09.09.05 03:02
Оценка:
Здравствуйте, Other Sam!

Спасибо, очень похоже на то что надо! Только теперь как избавиться от лишнего b_1?!

Получается
<a_1>
  <a_n>
    <id>42</id>
    <b_1><ADDING>Hello, World!!!</ADDING><b_1>
      <b_n>..</b_n>
    </b_1></b_1>
  </a_n>
</a_1>


А надо


<a_1>
  <a_n>
    <id>42</id>
    <b_1>
      <ADDING>Hello, World!!!</ADDING>
      <b_n>..</b_n>
    </b_1>
  </a_n>
</a_1>
Re[3]: Help: Как добавить элемент не меняя остальной структу
От: Lloyd Россия  
Дата: 09.09.05 08:52
Оценка:
Здравствуйте, lkv512, Вы писали:

L>Спасибо, очень похоже на то что надо! Только теперь как избавиться от лишнего b_1?!


А так?

<xsl:template match="a_n[id = '42']/b_1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
        <ADDING>Hello, World!!!</ADDING>
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.