2015-12-13 3 views
0

Привет всем, у меня есть вопрос относительно каждого цикла. Я хочу добавить текстовую последовательность после любого совпадения. на данный момент я получаю только текст и все матчи. любая идея почему?XSL - объединить для каждого с текстом

Это мой XML-файл, в качестве примера:

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
       <country>DE</country> 
       <country>AUT</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
</catalog> 

Это мой XML Transformation:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:for-each select="catalog/cd"> 
     <xsl:value-of select="country" /> 
     <xsl:text> and </xsl:text> 
     </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

Ее вот мой результат, и моя задача:

USA and 

ожидаемый выход должен быть:

USA and DE and AUT 

Я уверен, что это ошибка начинающего и легко решить, но я понятия не имею, как это легко решить. спасибо заранее

ответ

1

Это один из возможных способов:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:for-each select="catalog/cd/country"> 
      <xsl:value-of select="." /> 
      <xsl:if test="position() &lt; last()"> 
       <xsl:text> and </xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
    </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

xsltransform demo

Краткие пояснения:

  • Вы можете использовать точку (.) ссылаться на текущий элемент контекста
  • &lt; закодированный вариант менее чем знаковый характер <
  • xsl:for-each часть петли через country элементов вместо cd, как вы изначально делали. И внутри цикла проверьте, является ли текущий индекс позиции country (<) последним индексом, если он затем добавляет текст " and " к значению country, иначе будет выведено только значение.
+0

большое спасибо, это то, что я искал – Mchoeti

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