簡體   English   中英

在1.0中串聯XSLT值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM