我有下面的XML
<Category>
<CD></CD>
<Books>
<Book Sold="Y">Program C</Book>
<Book Sold="Y" LessCost="Y">Maths-Yeshwant</Book>
<Book>Test</Book>
</Books>
</Category>
输出预期为上述输入:
售出的书是程序C,数学-耶什旺特,少成本书是数学-耶什旺
特(如果"已售"属性不存在,则只需显示第二条语句 LessCost Books is Maths-Yeshwant
如果"成本较低"不存在,则只需显示第一个语句 已售图书是程序C
如果两个属性都不存在,则输出必须为空)
我尝试的代码在下面并且失败。这是从书本级别写的
<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>
缺少相应的结束标记,应</Book>
</Test>
。
XSLT:<xsl:foreach select="Books/Book">
应该是<xsl:for-each select="Books/Book">
的,并且<xsl:choose>
中的两个<xsl:when>
都缺少结束</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