2017-02-06 7 views
0
<library> 
<thriller> 
    <book> 
    <ISBN>1000</ISBN> 
    <title>Sherlock Holmes</title> 
    <author>Bob Dylan</author> 
    <publisher>BBC</publisher> 
    <country>England</country> 
    <price>10.90</price> 
    <edition>5</edition> 
    <year>2005</year> 
    </book> 
    <book> 
    <ISBN>1001</ISBN> 
    <title>The Indian Girl</title> 
    <author>Chetan Bhagat</author> 
    <publisher>Anusha Publishers</publisher> 
    <country>India</country> 
    <price>1270</price> 
    <edition>3</edition> 
    <year>2005</year> 
    </book> 
</thriller> 
</library> 


<xsl:for-each select="library/thriller/book"> then 
    <tr bgcolor="#9acd32"> 
      <td><xsl:value-of select="ISBN"/></td> 
      <td><xsl:value-of select="title"/></td> 
    </tr> 

</xsl:for-each> 

     <xsl:for-each select="library/thriller> 
     <xsl:for-each select="book"> 
      </xsl:for-each> 
    </xsl:for-each> 

В приведенном выше примере я хочу распечатать все содержимое книги в библиотеке в триллере, используя для каждого. Я пробовал , но он не отображает таблицу. Я дал все необходимые теги таблицы перед каждым. поэтому я пробовал \Как использовать вложенное разветвление, использующее для каждого в xslt

  but whether there is away to do that in single loop. thanks in advance. 
+0

Можете ли вы показать результаты, которые вы ожидаете для ввода, пожалуйста? Спасибо! –

ответ

0

Здесь у вас есть рабочий пример с одним циклом.

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="library"> 
    <table> 
     <xsl:for-each select="thriller/book"> 
     <tr bgcolor="#9acd32"> 
      <td><xsl:value-of select="ISBN"/></td> 
      <td><xsl:value-of select="title"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 

    <xsl:template match="/"> 
    <hmtl> 
     <head> 
     <title>Books</title> 
     </head> 
     <body> 
     <xsl:apply-templates/> 
     </body> 
    </hmtl> 
    </xsl:template> 

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

Обратите внимание, что:

  • Первый шаблон соответствует library.
  • Следовательно, (относительно) XPath в for-each предназначен для внутренних элементов, то есть thriller/book.
  • Перед циклом вы должны «начать» таблицу и «закрыть» ее потом. Возможно, вы забыли его в своем решении.
  • Окончательные 2 цикла, которые вы включили в свой источник, имеют пустой контент, , чтобы они ничего не делали.
+0

Предположим, что внутри элемента book я еще один элемент lyk , который имеет внутренние дочерние элементы <некоторый дочерний элемент 1>, затем <некоторый дочерний элемент 2>. Если я хочу напечатать только некоторые дочерние элементы, я могу указать внутри каждого из них как . Затем напечатайте все дочерние элементы с помощью . это верно ? –

+0

Внутри цикла 'for-each select =" триллер/книга "цикл" текущим элементом является 'book'. Итак, если вам нужно напечатать один дочерний элемент текущей «книги» , тогда используйте 'select =" something "' (без 'триллера/книги'). Если есть несколько таких дочерних элементов, вы можете использовать либо 'for-each' , либо, например, 'string-join'. –

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

  • Нет связанных вопросов^_^