[英]Concatenate XSLT values in 1.0
我下面有XML
<Category>
<CD></CD>
<Books>
<Book Sold="Y">Program C</Book>
<Book Sold="Y" LessCost="Y">Maths-Yeshwant</Book>
<Book>Test</Book>
</Books>
</Category>
以上輸入的OutputExpected is:
售出的書是ProgramC,數學-Yeshwant,較少的費用是數學-Yeshwant
(如果不存在“已售出”屬性,則只能顯示第二條語句。LessCost Books是Maths-Yeshwant
如果不存在“成本較低”,則僅必須顯示第一條語句。
如果兩個屬性都不存在,則輸出必須為空)
我嘗試的代碼在下面並且失敗了。這是從書本級別編寫的
<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進行翻譯
輸入XML和XSLT中存在一些錯誤。
輸入XML: <Category>
和<Books>
缺少相應的結束標記,而</Test>
應該是</Book>
。
XSLT: <xsl:foreach select="Books/Book">
應該是<xsl:for-each select="Books/Book">
,並且<xsl:choose>
中的兩個<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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.