2016-02-26 2 views
0

Прежде всего, я надеюсь, что меня поймут.Атрибут Tranfer в новый элемент

У меня есть это:

 <item> 
      <ptr target="X"/>BlahBlah 
     </item> 

И я хотел бы, чтобы преобразовать его в этом:

<li> 
     <a href="X">Blahblah</a> 
    </li> 

Все, что я мог сделать, это создать это:

<xsl:template match="tei:ptr"> 
     <li> 
      <a> 
       <xsl:value-of select="parent::node()"/> 
      </a> 
     </li> 
     <xsl:apply-templates/> 
    </xsl:template> 

Но результат был не тот, которого я ждал:

<li> 
     <a>BlahBlah</a> 
</li>BlahBlah 

Я мог бы изменить элементы, которые я хотел, но содержимое элемента <item> отображалось дважды, и я игнорирую способ отображения атрибута href. При необходимости я могу показать весь свой лист XSL.

Я искал через stackoverflow без результата, возможно, я просто не знаю, как поставить свою проблему в слова.

Не могли бы помочь и объяснить, как это работает? Я знаю, что у меня мало понимания XSLT, но я пытаюсь.

Большое спасибо за ваш ответ,

Matthias

ответ

0

Одним из способов достижения этой цели является:

<xsl:template match="//item/text()"> 
    <xsl:if test="normalize-space(.) != ''"> 
     <li> 
      <xsl:element name="a"> 
       <xsl:attribute name="href"> 
        <xsl:value-of select="../ptr/@target" /> 
       </xsl:attribute> 
       <xsl:value-of select="normalize-space(.)" /> 
      </xsl:element> 
     </li> 
    </xsl:if> 
</xsl:template> 

что приводит к

<?xml version="1.0" encoding="UTF-8"?> 
<li> 
    <a href="X">BlahBlah</a> 
</li> 

Вы можете заменить //item с относительным путем к элементу i i item f подходит.

+0

спасибо! Прекрасно работает – MGL

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