На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Pr0[)!9Y, ANDLL
  
> Помогите с синтаксисом, Преобразование из XML в XML
    Здравствуйте
    Только начал осваивать xsl преобразования, не могу разобраться со схемой.

    Есть исходная XML вида

    ExpandedWrap disabled
      <Structure>
          <Food name="Яблоко">
          <IsFruit>true</IsFruit>
          </Food>
          <Food name="Картофель">
          <IsFruit>false</IsFruit>
          </Food>
          
      </Structure>


    На выходе нужно получить

    ExpandedWrap disabled
      <Structure>
          <Fruit name="Яблоко">
          </Fruit>
          <Vegan name = "Картофель">
          </Vegan>
      </Structure>


    Исходную xml пытаюсь преборазовать при помощи следующей схемы:

    ExpandedWrap disabled
      <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
          <xsl:output method=""xml"" encoding=""UTF-8""/>
          <xsl:template match=""node() | @*"">
              <xsl:copy>
                  <xsl:apply-templates select=""@* | node()""/>
              </xsl:copy>
          </xsl:template>
              
          <xsl:for-each select = template match=""Structure/Food/"">
              <xsl:if test=""IsFruit@value = true"">      
                  <Fruit name = xsl:value-of select=""name"" / >
              </xsl:if>      
              <xsl:if test=""IsFruit@value = false"">    
                  <Vegan name = xsl:value-of select=""name"" / >
              </xsl:if>      
          </xsl:for-each>
      </xsl:stylesheet>


    Но ничего не получается, где ошибка?
      почему везде 4 двойных кавычек?
      свободные и открытые Web-скрипты k313.net закончились...
        Прога ругается на эту строку:
        Цитата Tammuz @
        <xsl:for-each select = template match="Structure/Food/">



        Цитата
        Severity: fatal
        Description: Open quote is expected for attribute "select" associated with an element type "xsl:for-each".
        "Нужно делать так, как нужно, а как не нужно, делать не нужно" © Винни-Пух.
          У тебя вообще тут что-то странное, for-each это одно, а template match - другое. Примеры:
          ExpandedWrap disabled
            <xsl:template match="/">
                <xsl:apply-templates/>
              </xsl:template>

          ExpandedWrap disabled
            <xsl:for-each select="$HEX_CMD_GRAPH_ARC_RELATIONS/RELATION[HARC_HARC_ID=$arc_id and HPRD_HPRD_ID != 0]">
                        <xsl:call-template name="hex-print_arc">
            ...
            ...

          Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
            Твой xml:
            ExpandedWrap disabled
              <?xml version="1.0" encoding="UTF-8"?>
              <Structure>
                  <Food name="Яблоко">
                      <IsFruit>true</IsFruit>
                  </Food>
                  <Food name="Картофель">
                      <IsFruit>false</IsFruit>
                  </Food>    
              </Structure>


            Пользуешь этот xsl:
            ExpandedWrap disabled
              <?xml version="1.0" encoding="UTF-8"?>
              <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
                  
                  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
                  
                  <xsl:template match="/">
                      <Structure><xsl:apply-templates select="//Food" /></Structure>      
                  </xsl:template>
                  
                  <xsl:template match="Food">        
                      <xsl:if test="IsFruit='true'"><Fruit name="{@name}" ></Fruit></xsl:if>
                      <xsl:if test="IsFruit='false'"><Vegan name="{@name}" ></Vegan></xsl:if>
                  </xsl:template>
                  
              </xsl:stylesheet>


            На выходе результат:
            ExpandedWrap disabled
              <?xml version="1.0" encoding="UTF-8"?>
              <Structure>
                  <Fruit name="Яблоко"/>
                  <Vegan name="Картофель"/>
              </Structure>
            Сообщение отредактировано: IEZ -
            "Нужно делать так, как нужно, а как не нужно, делать не нужно" © Винни-Пух.
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,0925 ]   [ 14 queries used ]   [ Generated: 19.09.19, 17:00 GMT ]