2016-01-28 3 views
1

Я пытаюсь преобразовать свой старый html с помощью xslt-script в мою новую структуру xml. У меня проблема с преобразованием исходного источника в мою необходимую структуру xml.Попытки использовать следующий-sibling для преобразования

Источник

<p> 
    <a class="DropDown">Example Text</a> 
</p> 
<div class="collapsed"> 
    <table>..</table> 
    <p>..</p> 
</div> 

Структура XML

<lq> 
    <p>Example Text</p> 
    <table>..</table> 
    <p>..</p> 
</lp> 

Я пробовал следующий XLS, но класс деления = "рухнуло" не принят в НД теге.

<xsl:template match="p/a[@class='DropDown']"> 
<lp> 
    <p><xsl:apply-templates select="text()"/></p> 
    <xsl:if test="/p/a/following-sibling::*[1][self::div]"> 
    <xsl:apply-templates select="*|text()"/> 
    </xsl:if> 
</lp> 
</xsl:template> 

Может ли кто-нибудь сказать мне, что я сделал неправильно, где ошибка?

Спасибо большое

+1

Пожалуйста, всегда оставляйте ** полный ** пример - даже если сведено к минимуму. –

ответ

2

ИМХО, что вы хотите сделать:

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

<xsl:template match="p[a/@class='DropDown']"> 
    <lp> 
     <p> 
      <xsl:value-of select="a"/> 
     </p> 
     <xsl:copy-of select="following-sibling::*[1][self::div]/node()"/> 
    </lp> 
</xsl:template> 

<xsl:template match="div[preceding-sibling::*[1][self::p/a/@class='DropDown']]"/> 

Что касается вашей ошибки:

  1. Вы проверяете существование некоторыхp, что является корнем элемент и содержит a, чей следующий брат - div. Ни один из них не является истинным в данном примере;

  2. xsl:if не меняет контекст: ваш <xsl:apply-templates select="*|text()"/> применяет шаблоны для дочерних узлов тока a;

  3. Предположительно вы не хотите div снова появится в первоначальном месте - , так что если у вас есть еще один шаблон, чтобы подавить его, вы не можете использовать <xsl:apply-templates>, чтобы вставить его на место вы хотите - в по крайней мере, не используя другой режим.

+0

Спасибо за помощь и за хорошие объяснения. Это помогло мне многое осознать мои ошибки. Ваш пример делает именно то, что я хотел сделать. – Olli

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