2015-06-02 2 views
2

Я преобразование следующего XML в HTML:Как знать, когда поставить закрывающий тег на вложенных элементах

<rule> 
    <condition type="AND"> 
     <condition type="AND"> 
      <condition type="NOT"> 
      </condition> 
     </condition> 
    </condition> 
</rule> 

Из этой структуры, можно сделать вывод о том, что условие может иметь другое состояние (или не как последнее условие).

Я пытаюсь создать ту же структуру в html и не уверен, когда/как/где поставить закрывающие теги для условий, в которых есть условия внутри них. Это выход настоящее время я получаю, но я хотел бы, чтобы это было как выше выход:

<rule> 
    <condition type="AND"> 
    </condition> 
     <condition type="AND"> 
     </condition> 
      <condition type="NOT"> 
      </condition> 
</rule> 

Вот мой XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" /> 
    <xsl:template match="/"> 
     &lt;rule&gt; 
     <xsl:apply-templates select=".//condition" /> 
     &lt;/rule&gt; 
    </xsl:template> 
    <xsl:template match="condition"> 
     <xsl:variable name="margin-left"><xsl:number value="(count(ancestor::condition) + 1) * 20" />px</xsl:variable> 
     <ul class="list-unstyled" style="margin:0px;margin-left:{$margin-left}"> 
      <li> 
       &lt;condition type="<xsl:value-of select="@type"/>"&gt;<br /> 
       &lt;/condition&gt; 
      </li> 
     </ul> 
    </xsl:template> 
</xsl:stylesheet> 

ответ

2

select=".//condition" имеет эффект уплощение иерархии, поскольку вы выбираете все элементы condition на всех уровнях в один список. Вместо этого, вы должны начать с применением шаблонов для всего верхнего уровня condition:

<xsl:template match="/rule"> 
    &lt;rule&gt; 
    <xsl:apply-templates select="condition" /> 
    &lt;/rule&gt; 
</xsl:template> 

и затем иметь condition шаблон обрабатывать рекурсию, применяя шаблоны для своих собственных детей, например:

<xsl:template match="condition"> 
    <ul> 
     <li> 
      &lt;condition type="<xsl:value-of select="@type"/>"&gt;<br /> 
      <xsl:apply-templates select="condition"/> 
      &lt;/condition&gt; 
     </li> 
    </ul> 
</xsl:template> 

(Я пропустил часть стилизации, вы можете отсортировать ее в своей полной таблице стилей, как только у вас появится концепция использования рекурсии - на самом деле, если вы используете дополнение, а не маржу, вам может не понадобиться весь подсчет трюков предков вообще так как каждый ul гнезд в предыдущем).

+0

Perfect - большое спасибо. Вы тоже были набиты. –

Смежные вопросы