Адкрыццё і закрыццё HTML тэга ў XSLT

У мяне ёсць гэты XML:

    
      Id0
      Title0
    
    
      Id1
      Title1
    
    
      Id2
      Title2
    
    
      Id3
      Title3
    
    
      Id4
      Title4
    
    
      Id5
      Title5
    

Гэты xml пераўтворыцца з дапамогай XSLT і павінна вырабляць гэты HTML

<html>
    <body>
        <div>
            <div>
                Title0
            </div>
            <div>
                Title1
            </div>
            
            <div>
                Title5
            </div>
        </div>
    </body>
</html>

Гэтая думка пра тое, што атрыбуты Start, Stop і IsSub кантралюе адкрыццё і закрыццё тэгаў.

У цяперашні час у мяне ёсць гэты XSLT:

<?xml version="1.0"?>

    
        
            <body>
                
                    <div class="XmlTreffinfo">
                                                       
                            <div>
                                <div>
                                    
                                        
                                    
                                </div>
                            </div>
                        

                        
                            <div>
                              
                            </div>
                        
                    </div>
                
            </body>
        </html>
    

Праблема заключаецца ў тым, што, якія адкрываюць і закрываюць тэгі ў сінтаксічнай няправільным месцы не дапускаецца. Вы ведаеце, як вырашыць гэтую праблему? (Глядзі ўнутры КСФ, дзе зыходны DIV і уль размешчаны на іншым месцы, чым які закрывае тэгамі)

EDIT: Я магу дадаваць і выдаляць атрыбуты ў XML, але структура элемент павінен быць, як гэта?

EDIT2: Я спрабаваў вынесці з HTML-тэгі, выкарыстоўваючы CONCAT і значэнне-в

   
   

Цікава, што IE10 можа справіцца з гэтым і Firefox, але не ў стане карэктна адлюстраваць яго.

2
Я мяркую, у рэальным жывуць там больш элементаў з IsSub = «flase». Там, дзе элементы з sSub = "сапраўднай" павінны быць згрупаваны ў папярэдні элемент з IsSub = «flase». Я не рашэнне кінуць паліць лёгка.
дададзена аўтар hr_117, крыніца
Я мяркую, у рэальным жывуць там больш элементаў з IsSub = «flase». Там, дзе элементы з sSub = "сапраўднай" павінны быць згрупаваны ў папярэдні элемент з IsSub = «flase». Я не рашэнне кінуць паліць лёгка.
дададзена аўтар hr_117, крыніца
Калі ёсць некаторыя карэкціроўкі атрыбутаў XML, якія можна зрабіць? Я магу дадаваць і выдаляць атрыбуты ў XML, але элемент структура павінна быць пакінутая ў спакоі.
дададзена аўтар Stian Standahl, крыніца
Калі ёсць некаторыя карэкціроўкі атрыбутаў XML, якія можна зрабіць? Я магу дадаваць і выдаляць атрыбуты ў XML, але элемент структура павінна быць пакінутая ў спакоі.
дададзена аўтар Stian Standahl, крыніца
Калі ёсць некаторыя карэкціроўкі атрыбутаў XML, якія можна зрабіць? Я магу дадаваць і выдаляць атрыбуты ў XML, але элемент структура павінна быць пакінутая ў спакоі.
дададзена аўтар Stian Standahl, крыніца
Калі ёсць некаторыя карэкціроўкі атрыбутаў XML, якія можна зрабіць? Я магу дадаваць і выдаляць атрыбуты ў XML, але элемент структура павінна быць пакінутая ў спакоі.
дададзена аўтар Stian Standahl, крыніца
Так, ёсць некалькі элементаў і атрыбутаў. Гэты прыклад ўяўляе сабой ўсечаную версію асноўнай праблемы я з
дададзена аўтар Stian Standahl, крыніца
Так, ёсць некалькі элементаў і атрыбутаў. Гэты прыклад ўяўляе сабой ўсечаную версію асноўнай праблемы я з
дададзена аўтар Stian Standahl, крыніца
Я спрабаваў паставіць адкрыццё і закрыццё тэгаў ўнутры CDATA, але HTML не будуць аналізавацца ў HTML-парсер для нейкай прычыне
дададзена аўтар Stian Standahl, крыніца
Я спрабаваў паставіць адкрыццё і закрыццё тэгаў ўнутры CDATA, але HTML не будуць аналізавацца ў HTML-парсер для нейкай прычыне
дададзена аўтар Stian Standahl, крыніца
Я спрабаваў паставіць адкрыццё і закрыццё тэгаў ўнутры CDATA, але HTML не будуць аналізавацца ў HTML-парсер для нейкай прычыне
дададзена аўтар Stian Standahl, крыніца
Я спрабаваў паставіць адкрыццё і закрыццё тэгаў ўнутры CDATA, але HTML не будуць аналізавацца ў HTML-парсер для нейкай прычыне
дададзена аўтар Stian Standahl, крыніца

8 адказы

Я склаў крыху больш складаную версію, напрыклад, каб пераканацца, што я трэніруюся мадэль цалкам:


    
        Id0
        Title0
    
    
        Id1
        Title1
    
    
        Id2
        Title2
    
    
        Id3
        Title3
    
    
        Id4
        Title4
    
    
        Id5
        Title5
    
    
        Id6
        Title6
    
    
        Id7
        Title7
    

Затым, выкарыстоўваючы рэжымы і капіраванне для наступных падпаслядоўнасці наступнага XSLT будзе аналізаваць вашыя элементы:

<?xml version="1.0" encoding="UTF-8"?>

    
        <html>
            <body>
                <div>
                                        
                </div>
            </body>
        </html>
    

    
        <div>
            
        </div>
    

    
               
    

    

    
        
    

    
        
            
        
        
            
        

        
    

    
        
 
    

    



У наступны вынік:

<html>
   <body>
      <div>

         <div>Title0</div>

         <div>Title1</div>

         


         <div>Title5</div>

         

      </div>
   </body>
</html>

Спадзяюся, што гэта дапамагае.

1
дададзена

Я склаў крыху больш складаную версію, напрыклад, каб пераканацца, што я трэніруюся мадэль цалкам:


    
        Id0
        Title0
    
    
        Id1
        Title1
    
    
        Id2
        Title2
    
    
        Id3
        Title3
    
    
        Id4
        Title4
    
    
        Id5
        Title5
    
    
        Id6
        Title6
    
    
        Id7
        Title7
    

Затым, выкарыстоўваючы рэжымы і капіраванне для наступных падпаслядоўнасці наступнага XSLT будзе аналізаваць вашыя элементы:

<?xml version="1.0" encoding="UTF-8"?>

    
        <html>
            <body>
                <div>
                                        
                </div>
            </body>
        </html>
    

    
        <div>
            
        </div>
    

    
               
    

    

    
        
    

    
        
            
        
        
            
        

        
    

    
        
 
    

    



У наступны вынік:

<html>
   <body>
      <div>

         <div>Title0</div>

         <div>Title1</div>

         


         <div>Title5</div>

         

      </div>
   </body>
</html>

Спадзяюся, што гэта дапамагае.

1
дададзена

Я хацеў бы прапанаваць рашэнне, заснаваны ключа да групы вы XmlTreff элементаў.


І чым выкарыстоўваць шаблоны, як наступныя:

<?xml version="1.0" encoding="utf-8" ?>

    
    

    

    
        
            
        
    

    
        <div>
            
                 
        </div>
        
    
    
        
  •  
        
        
    
            <html>
                <body>
                    <div class="XmlTreffinfo">
                        
                    </div>
                </body>
            </html>
    
        
    
    

    Увага: Я ігнараваць Пуск і Стоп атрыбут. Толькі сэнс гэтага можа быць, каб мець намёк на першы ў апошняй запісу.

    With this input: ?xml version="1.0" encoding="utf-8" ?>

    
        
            Id1
            Title1
        
        
            Id2
            Title2
        
        
            Id3
            Title3
        
        
            Id4
            Title4
        
    
        
            Id1
            Title12
        
        
            Id2
            Title22
        
        
            Id3
            Title32
        
        
            Id4
            Title42
        
    
    

    Ён будзе генераваць наступную выснову:

    <?xml version="1.0"?>
    <html>
      <body>
        <div class="XmlTreffinfo">
          <div>
            Title1
          </div>
          
          <div>
            Title12
          </div>
          
        </div>
      </body>
    </html>
    
    1
    дададзена
    Ды ён павінен таксама працаваць з змененым уваходам. ;-) Гэта была прычына для выкарыстання ключа.
    дададзена аўтар hr_117, крыніца
    Я дадаў яшчэ некалькі xml у прыведзеным вышэй прыкладзе для нагляднасці. Ці верыце вы, што ён усё роўна будзе зрабіць з xml правільна? (Ёсць некаторыя XmlTreff, што не мае якіх-небудзь дапаможных элементаў)
    дададзена аўтар Stian Standahl, крыніца

    Што рабіць, калі пачынаецца і спыняецца аленевая скура супасці? Я думаю, што гэта безнадзейная задача, каб быць сумленным. Альбо зрабіць ваш xml мае структуру непасрэдна, як у:

    
        Id1
        Title1
        
            Id2
            Title2
        
        
            Id3
            Title3
        
        
            Id4
            Title4
        
    
    

    або, калі вы не можаце зрабіць гэта, вызначыць структуру ў асобным раздзеле, дзе вы спасылаецеся вашы пытанні з, напрыклад, значэнне тэга Id.

    
        
            
            
            
        
    
    
    1
    дададзена
    Калі вы ведаеце, дзе паставіць сабвуфер, запускаць і спыняць рэчы, я не разумею, чаму вы не можаце зрабіць другі варыянт; яна нават можа быць у асобным файле. Жыццё было б Су значна прасцей :-)
    дададзена аўтар forty-two, крыніца
    Структурны элемент не можа быць зменены (Глядзі рэдагавання)
    дададзена аўтар Stian Standahl, крыніца

    Што рабіць, калі пачынаецца і спыняецца аленевая скура супасці? Я думаю, што гэта безнадзейная задача, каб быць сумленным. Альбо зрабіць ваш xml мае структуру непасрэдна, як у:

    
        Id1
        Title1
        
            Id2
            Title2
        
        
            Id3
            Title3
        
        
            Id4
            Title4
        
    
    

    або, калі вы не можаце зрабіць гэта, вызначыць структуру ў асобным раздзеле, дзе вы спасылаецеся вашы пытанні з, напрыклад, значэнне тэга Id.

    
        
            
            
            
        
    
    
    1
    дададзена
    Калі вы ведаеце, дзе паставіць сабвуфер, запускаць і спыняць рэчы, я не разумею, чаму вы не можаце зрабіць другі варыянт; яна нават можа быць у асобным файле. Жыццё было б Су значна прасцей :-)
    дададзена аўтар forty-two, крыніца
    Структурны элемент не можа быць зменены (Глядзі рэдагавання)
    дададзена аўтар Stian Standahl, крыніца

    Што рабіць, калі пачынаецца і спыняецца аленевая скура супасці? Я думаю, што гэта безнадзейная задача, каб быць сумленным. Альбо зрабіць ваш xml мае структуру непасрэдна, як у:

    
        Id1
        Title1
        
            Id2
            Title2
        
        
            Id3
            Title3
        
        
            Id4
            Title4
        
    
    

    або, калі вы не можаце зрабіць гэта, вызначыць структуру ў асобным раздзеле, дзе вы спасылаецеся вашы пытанні з, напрыклад, значэнне тэга Id.

    
        
            
            
            
        
    
    
    1
    дададзена
    Калі вы ведаеце, дзе паставіць сабвуфер, запускаць і спыняць рэчы, я не разумею, чаму вы не можаце зрабіць другі варыянт; яна нават можа быць у асобным файле. Жыццё было б Су значна прасцей :-)
    дададзена аўтар forty-two, крыніца
    Структурны элемент не можа быць зменены (Глядзі рэдагавання)
    дададзена аўтар Stian Standahl, крыніца

    Ваша праблема з'яўляецца выдатным прыкладам выкарыстання XSLT ў правільным і просты спосаб. Яна можа быць вырашана з дапамогай трох шаблонаў. Вам не трэба запускаць і спыняць атрыбуты:

    <?xml version="1.0" encoding="UTF-8"?>  
    
    
        <html>
            <body>
                <div>
                    
                </div>
                
            </body>
        </html>
    
    
        <div>
            
                 
        </div>
    
    
        
  •  
    
      
    

    На жаль @ hr_117: Я бачыў толькі, што колькасць кода і не зразумеў, што ваша рашэнне аб тым жа, як у мяне, акрамя я не выкарыстоўваў ключы для прастаты

    0
    дададзена
    @Andreas: Добры варыянт сартавання. Але гэта толькі будзе працаваць, калі ёсць толькі адзін запіс з XmlTreff [@ IsSub = "хлусьня"]. Калі ёсць больш Гатовае рашэнне пачынае быць карацей.
    дададзена аўтар hr_117, крыніца
    @StianStandahl Ці вы паспрабаваць ключ базы VESTION. Калі па-ранейшаму выконваць змененыя патрабаванні.
    дададзена аўтар hr_117, крыніца
    @StianStandahl Таму вы павінны выкарыстоўваць раствор ключа на аснове.
    дададзена аўтар hr_117, крыніца
    Прычына для гэтага элемента структуры не можа быць зменена з-за кліент, ужо з дапамогай гэтай структуры ў атрыманні вынікаў пошуку. Калі я змяніць структуру элемента, яны таксама павінны змяніцца, як яны разабраць вынік.
    дададзена аўтар Stian Standahl, крыніца
    Я паспрабую гэта @ hr_117, я буду трымаць вас у курсе.
    дададзена аўтар Stian Standahl, крыніца
    Парадак важны ў XML. Што я спрабую зрабіць, гэта зрабіць з бацькоўскіх хітоў пошуку з суб хітамі ўнізе. Бацька заўсёды будзе ісці на лініі ўсмоктвання з IsSub = сапраўдных элементаў. Я дадам яшчэ трохі для ўзору xml для яснасці.
    дададзена аўтар Stian Standahl, крыніца
    Я паспрабаваў іншыя прапановы, дадаўшы бацькоўскі ідэнтыфікатар. Але калі б было некалькі сотняў пошукавых трапленняў, то XSLT tranformation быў даволі павольным.
    дададзена аўтар Stian Standahl, крыніца
    @StianStandahl: Маючы пару сотняў элементаў для пошуку з'яўляецца прычынай яго ўласнага выкарыстання ключоў як прапанавана hr_117, так што ісці на яго рашэнне. Калі маё паведамленне было карысна, каб паказаць вам ідэю выкарыстання XSLT, я задаволены, як я лічу, у сваёй прастаце і прыгажосці, якія часта выпускаюць з-пад увагі з-за няправільнае выкарыстанне.
    дададзена аўтар Andreas, крыніца
    @StianStandahl: Калі вы кантралюеце структуру дадзеных (падобна, таму што вы дадалі старт/стоп атрыбуты) можа быць прасцей, каб подэлементы быць сапраўдным Чайлдсом сваіх бацькоў, каб вы маглі прымяніць іх з шаблону бацькоў. Калі гэта не ўяўляецца магчымым, вы можаце прымацаваць бацька ідэнтыфікатар з падраздзелаў ўжываць шаблоны як XmlTreff [бацька :: XmlTreff/ID = $ myParentId]
    дададзена аўтар Andreas, крыніца
    @ Hr_117: Я прызнаю, групаванне неабходна, як толькі дадзеныя ўскладніцца. Асноўная задача майго адказу не было, каб стварыць поўнае рашэнне рэальным жыцці, але, каб даць уяўленне, як XSLT працуе, што вырашае прыклад і досыць лёгка матываваць разумення. Я думаю, што «XSL: калі» варта пазбягаць і адна прычына, людзі не разумеюць, XSLT.
    дададзена аўтар Andreas, крыніца

    Ваша праблема з'яўляецца выдатным прыкладам выкарыстання XSLT ў правільным і просты спосаб. Яна можа быць вырашана з дапамогай трох шаблонаў. Вам не трэба запускаць і спыняць атрыбуты:

    <?xml version="1.0" encoding="UTF-8"?>  
    
    
        <html>
            <body>
                <div>
                    
                </div>
                
            </body>
        </html>
    
    
        <div>
            
                 
        </div>
    
    
        
  •  
    
      
    

    На жаль @ hr_117: Я бачыў толькі, што колькасць кода і не зразумеў, што ваша рашэнне аб тым жа, як у мяне, акрамя я не выкарыстоўваў ключы для прастаты

    0
    дададзена
    @StianStandahl Ці вы паспрабаваць ключ базы VESTION. Калі па-ранейшаму выконваць змененыя патрабаванні.
    дададзена аўтар hr_117, крыніца
    @Andreas: Добры варыянт сартавання. Але гэта толькі будзе працаваць, калі ёсць толькі адзін запіс з XmlTreff [@ IsSub = "хлусьня"]. Калі ёсць больш Гатовае рашэнне пачынае быць карацей.
    дададзена аўтар hr_117, крыніца
    @StianStandahl Таму вы павінны выкарыстоўваць раствор ключа на аснове.
    дададзена аўтар hr_117, крыніца
    Прычына для гэтага элемента структуры не можа быць зменена з-за кліент, ужо з дапамогай гэтай структуры ў атрыманні вынікаў пошуку. Калі я змяніць структуру элемента, яны таксама павінны змяніцца, як яны разабраць вынік.
    дададзена аўтар Stian Standahl, крыніца
    Я паспрабую гэта @ hr_117, я буду трымаць вас у курсе.
    дададзена аўтар Stian Standahl, крыніца
    Я паспрабаваў іншыя прапановы, дадаўшы бацькоўскі ідэнтыфікатар. Але калі б было некалькі сотняў пошукавых трапленняў, то XSLT tranformation быў даволі павольным.
    дададзена аўтар Stian Standahl, крыніца
    Парадак важны ў XML. Што я спрабую зрабіць, гэта зрабіць з бацькоўскіх хітоў пошуку з суб хітамі ўнізе. Бацька заўсёды будзе ісці на лініі ўсмоктвання з IsSub = сапраўдных элементаў. Я дадам яшчэ трохі для ўзору xml для яснасці.
    дададзена аўтар Stian Standahl, крыніца
    @StianStandahl: Маючы пару сотняў элементаў для пошуку з'яўляецца прычынай яго ўласнага выкарыстання ключоў як прапанавана hr_117, так што ісці на яго рашэнне. Калі маё паведамленне было карысна, каб паказаць вам ідэю выкарыстання XSLT, я задаволены, як я лічу, у сваёй прастаце і прыгажосці, якія часта выпускаюць з-пад увагі з-за няправільнае выкарыстанне.
    дададзена аўтар Andreas, крыніца
    @StianStandahl: Калі вы кантралюеце структуру дадзеных (падобна, таму што вы дадалі старт/стоп атрыбуты) можа быць прасцей, каб подэлементы быць сапраўдным Чайлдсом сваіх бацькоў, каб вы маглі прымяніць іх з шаблону бацькоў. Калі гэта не ўяўляецца магчымым, вы можаце прымацаваць бацька ідэнтыфікатар з падраздзелаў ўжываць шаблоны як XmlTreff [бацька :: XmlTreff/ID = $ myParentId]
    дададзена аўтар Andreas, крыніца
    @ Hr_117: Я прызнаю, групаванне неабходна, як толькі дадзеныя ўскладніцца. Асноўная задача майго адказу не было, каб стварыць поўнае рашэнне рэальным жыцці, але, каб даць уяўленне, як XSLT працуе, што вырашае прыклад і досыць лёгка матываваць разумення. Я думаю, што «XSL: калі» варта пазбягаць і адна прычына, людзі не разумеюць, XSLT.
    дададзена аўтар Andreas, крыніца