在 1.0 中连接 XSLT 值



我有下面的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

相关内容

  • 没有找到相关文章

最新更新