报告是否有价格超过 10 美元的小说书的超级有效方法

Super-efficient way to report on whether or not there are fiction books costing more than $10

我的 XML 文档包含一系列不同类型(小说、非小说等)的书籍元素

我想创建一个输出 true if:

的 XSLT 模板
  1. 没有小说。

  2. 有小说书籍,每本价格低于或等于 $10.00

我希望模板输出 false 如果:

  1. 有些小说的价格超过 10.00 美元

我下面的模板可以完成这项工作,但我希望您能提供更有效的解决方案。我的模板需要很多步骤来解决这样一个简单的问题。我怀疑我的模板在处理大量数据时性能不佳。你能提供一个超高效的解决方案吗?

这是我的模板:

<xsl:template match="Books">
    <xsl:variable name="fiction-books" select="Book[Genre eq 'Fiction']" />
    <xsl:variable name="no-fiction-books-that-cost-more-than-10-dollars" select="not(exists(Book[Genre eq 'Fiction'][number(Cost) gt 10.00]))" />
    <xsl:variable name="no-fiction-books" select="not(exists($fiction-books))" />

    <xsl:value-of select="$no-fiction-books or $no-fiction-books-that-cost-more-than-10-dollars" />
</xsl:template>

这是一个示例输入(XSLT 应使用此输入输出 false):

<Books>
    <Book>
        <Title>ABC</Title>
        <Genre>Fiction</Genre>
        <Cost>10.00</Cost>
    </Book>
    <Book>
        <Title>DEF</Title>
        <Genre>Fiction</Genre>
        <Cost>20.00</Cost>
    </Book>
</Books>

I want the template to output false if:

  1. There are fiction Books that cost greater than .00

怎么样:

<xsl:template match="/Books">
    <xsl:value-of select="not(Book[Genre='Fiction']/Cost >10)" />
</xsl:template>

请注意,输出不是 XML。

您可以简单地使用

<xsl:value-of select="count(Book[Genre='Fiction'][Cost &gt; 10]) = 0" />

计算 Genre'Fiction' 并且 Cost 大于 '10' 的所有书籍。然后检查该计数是否等于 0。