Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > из XML в XML другого типа


Автор: Invisible 4.11.2008, 15:29
Никогда ранее не работал с xslt  преобразованиями но оч нужно .. а въехать не успеваю 

Есть у меня такой кусок xml 
Код

<point>
   <coordinate axis="1" value="5"/>
   <coordinate axis="2" value="25"/>
</point>
<point>
   <coordinate axis="1" value="10"/>
   <coordinate axis="2" value="11"/>
</point>


Надо: 
Код

<point caption="25">
   <coordinate axis="1" value="5"/>
</point>
<point caption="11">
   <coordinate axis="1" value="10"/>
</point>


Тоесть value координат (тэг coordinates) со значениями на осях равных двум (axis == 2) переписать в атрибут caption тэга point. Надеюсь всё понятно. Проблема у меня состояла в том, что я не мог положить в переменные 1ую координату и 2ую а потом записать так как мне нужно. Примерно так было у меня
Код

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>

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

  <xsl:template match="point ">    
             <xsl:variable name="coord1"><xsl:value-of select="coordinate/@value"/></xsl:variable> 
             <xsl:variable name="coord2"><xsl:value-of select="coordinate/@value"/></xsl:variable> 
              
              <xsl:element name="point">
                              <xsl:attribute name="caption">
                                      <xsl:value-of select="$coord2"/>
                              </xsl:attribute> 
                              <xsl:element name="coordinate">
                                          <xsl:attribute name="axis">
                                                <xsl:value-of select="1"/> 
                                          </xsl:attribute>
                                          <xsl:attribute name="value">
                                            <xsl:value-of select="$coord1"/> 
                                          </xsl:attribute>
                              </xsl:element>
              </xsl:element>    
    </xsl:template>
  
  <xsl:template match="coordinate" mode="next">    
               <xsl:value-of select="@value"/>
  </xsl:template>


</xsl:stylesheet>

Автор: jsa 5.11.2008, 05:58
Код

<xsl:template match="point">
   <xsl:element name="point">
      <xsl:attribute name="caption">
        <xsl:value-of select="coordinate[@axis='2']/@value"/>
      </xsl:attribute>
      <xsl:copy select="coordinate[@axis='1']" />
   </xsl:element>
</xsl:template>

Автор: Invisible 5.11.2008, 09:49
Большое спасибо, всё получилось  smile 

Автор: Invisible 3.12.2008, 14:33
Здравствуйте, снова у меня проблемы, прошу вас помочь мне кое где.

Сейчас посмотрю куда бы приложить файлы с xml  и xslt....

Добавлено @ 14:43
Xslt & xml в приложении. Изымаем данные которые нам нужны и записываем считая их. Я думаю если вы запустите приобразование во вложении вам станет ясно что происходит. так вот .мне нужжно что б при встречи <report>  мой счетчик в переменной обнулился. 

Вот эта переменная
Код

 <xsl:variable name="line_count">
            <xsl:number level="any" from="point"/>
        </xsl:variable>


Я так понимаю что сйчас в перменной хранится не протсо номер а количество тэгов ... тоесть с каждым новым тэгом point счетчик увиличивается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)