2014-11-30 5 views
-1

У меня ниже XMLзначения Объединить XSLT в 1.0

<Category> 
<CD></CD> 
<Books> 
<Book Sold="Y">Program C</Book> 
<Book Sold="Y" LessCost="Y">Maths-Yeshwant</Book> 
<Book>Test</Book> 
</Books> 
</Category> 

OutputExpected isfor выше ввода:

продаваемые книги являются ProgramC, Математика-Yeshwant, LessCost Книги Математика-Yeshwant

(если продано атрибута нет, тогда должна отображаться только вторая заявка. LessCost Books: Maths-Yeshwant

если Less Cost нет, то только первая инструкция должна быть вытеснена Yed Продана Книга ProgramC

, если оба атрибута нет, то выход должен быть пустым)

Кода я попытался ниже и failing.This написано от уровня книги

<xsl:for-each select="Books/Book"> 
    <xsl:variable name="SoldBooks" select="''"/> 
    <xsl:variable name="LessCostBooks" select="''"/> 
    <xsl:text>Sold Books are</xsl:text> 
    <xsl:for-each select="Books/Book"> 
     <xsl:choose> 
     <xsl:when test="@Sold='Y'"> 
     <xsl:value-of select="concat($SoldBooks,text(),',')"> 
     </xsl:choose> 
    </xsl:for-each> 
    <xsl:text>Less Cost Books are</xsl:text> 
    <xsl:for-each select="Books/Book"> 
     <xsl:choose> 
     <xsl:when test="@LessCost='Y'"> 
     <xsl:value-of select="concat($LessCostBooks,text(),',')"> 
     </xsl:choose> 
    </xsl:for-each> 
</xsl:for-each> 

Может кто-то пожалуйста, дайте мне знать, где я ошибаюсь, поскольку я начинаю. Также мне нужно сделать перевод с использованием XSLT 1.0

+2

Возможно, прежде чем ожидать ответов на ваш 16-й вопрос, вы можете сначала принять некоторые из тонких ответов, которые вы получили по своим предыдущим 15 вопросам? Конечно, более 1 из них были полезны для вас. – kjhughes

ответ

2

В вашем XML-входе и в XSLT есть некоторые ошибки.
Ввод XML: <Category> и <Books> отсутствуют соответствующий закрывающий тег, а </Test> должен быть </Book>.
XSLT: <xsl:foreach select="Books/Book"> должно быть <xsl:for-each select="Books/Book">, и оба <xsl:when> в <xsl:choose> не имеют замыкания </xsl:when>.

Для скорректированного входного XML

<Category> 
    <CD></CD> 
    <Books> 
     <Book Sold="Y">Program C</Book> 
     <Book Sold="Y" LessCost="Y">Maths-Yeshwant</Book> 
     <Book>Test</Book> 
    </Books> 
</Category> 

следующий XSLT

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="xml" doctype-public="XSLT-compat" 
    omit-xml-declaration="yes" encoding="UTF-8" indent="no" /> 
<xsl:strip-space elements="*"/> 
    <xsl:template match="Books"> 
    <xsl:if test="Book[@Sold='Y']"> 
     <xsl:text>Sold Books are </xsl:text> 
     <xsl:for-each select="Book[@Sold='Y']"> 
     <xsl:value-of select="."/> 
     <xsl:if test="position()!= last()"> 
      <xsl:text>, </xsl:text> 
     </xsl:if> 
     </xsl:for-each> 
    </xsl:if> 

    <xsl:if test="Book[@LessCost='Y']"> 
     <xsl:if test="Book[@Sold='Y']"> 
     <xsl:text>, </xsl:text> 
     </xsl:if> 
     <xsl:text>Less Books are </xsl:text> 
     <xsl:for-each select="Book[@LessCost='Y']"> 
      <xsl:value-of select="."/> 
      <xsl:if test="position()!= last()"> 
      <xsl:text>, </xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
    </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

производит выходной сигнал

Sold Books are Program C, Maths-Yeshwant, Less Books are Maths-Yeshwant 

Одно недоразумение в вашем XSLT является подход, чтобы изменить переменную, которая не является возможно в XSLT. Для получения дополнительной информации о переменных в XSLT вы можете проверить, например. http://www.dpawson.co.uk/xsl/sect2/N8090.html

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