2010-06-15 3 views
3

У меня есть содержимое, которое вытягивается из внешнего xml с xsl. В xml заголовок объединяется с автором с обратной косой чертой, разделяющей их.разделительная строка в xsl для содержимого с/

Как отделить название и автор в XSL, так что я могу иметь их с различными метками

<product> 
    <title>The Maze/Jane Evans</title> 
</product> 

быть

<h2>The Maze</h2> 
<p>Jane Evans</p> 
+0

Хороший вопрос (+1). См. Мой ответ для краткого и простого решения, которое полностью соответствует духу XSLT. –

ответ

1

Надеется, что это помогает! Дайте мне знать, если я неверно истолковал вопрос!

<xsl:variable name="title"> 
    <xsl:value-of select="/product/title"/> 
</xsl:variable> 

<xsl:template match="/"> 
    <xsl:choose> 
     <!--create new elements from existing text--> 
     <xsl:when test="contains($title, '/')"> 
      <xsl:element name="h2"> 
       <xsl:value-of select="substring-before($title, '/')"/> 
      </xsl:element> 
      <xsl:element name="p"> 
       <xsl:value-of select="substring-after($title, '/')"/> 
      </xsl:element> 
     </xsl:when> 
     <xsl:otherwise> 
      <!--no '/' deliminator exists--> 
      <xsl:value-of select="$title"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+0

Просто хотел сказать спасибо за вашу помощь. Smashing !! – kristina

+0

Спасибо! Я рад, что это помогло. Если вы считаете, что это правильное решение. Я бы не прочь иметь мое первое * принятое решение *;) – developer

1

Это преобразование:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

<xsl:template match="title[contains(., '/')]"> 
    <h2> 
    <xsl:value-of select="substring-before(., '/')"/> 
    </h2> 
    <p> 
    <xsl:value-of select="substring-after(., '/')"/> 
    </p> 
</xsl:template> 

<xsl:template match="title"> 
    <h2><xsl:value-of select="."/></h2> 
</xsl:template> 
</xsl:stylesheet> 

при нанесении на поставленном XML документа:

<product> 
    <title>The Maze/Jane Evans</title> 
</product> 

производит желаемого результата:

<h2>The Maze </h2> 
<p> Jane Evans</p> 

Обратите внимание, что явный условный код не используется - процессор XSLT выполняет эту работу самостоятельно.

+0

+1 для этого просто с совпадением шаблонов. –

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