Xml 超级高效的方式来报告是否有成本超过10美元的小说
我的XML文档由一系列不同类型(小说、非小说等)的书籍元素组成 我想创建一个XSLT模板,在以下情况下输出Xml 超级高效的方式来报告是否有成本超过10美元的小说,xml,performance,xslt,xslt-2.0,processing-efficiency,Xml,Performance,Xslt,Xslt 2.0,Processing Efficiency,我的XML文档由一系列不同类型(小说、非小说等)的书籍元素组成 我想创建一个XSLT模板,在以下情况下输出true: 没有小说 有一些小说,每本售价不到或等于10美元 如果出现以下情况,我希望模板输出false: 有些小说的价格超过10美元 我的模板下面做的工作,但我希望你能提供一个更有效的解决方案。我的模板采取了很多步骤来解决这样一个简单的问题。我怀疑我的模板在处理大量数据时性能会很差。你能为这个问题提供一个超级高效的解决方案吗 这是我的模板: <xsl:template match="
true
:
false
:
<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>
如果出现以下情况,我希望模板输出false:
<xsl:template match="/Books">
<xsl:value-of select="not(Book[Genre='Fiction']/Cost >10)" />
</xsl:template>
请注意,输出不是XML。您只需使用
这包括
类型为'Fiction'且成本大于'10'的所有书籍。然后检查该计数是否等于0。根据您的第二点,给定的输入为“true”,因为一本书的成本小于或等于10。很可能这个简单转换的成本将主要由启动XSLT转换引擎、编译样式表、,以及解析源文档。因此,改进XSLT代码可能是一项毫无意义的工作。
<xsl:template match="/Books">
<xsl:value-of select="not(Book[Genre='Fiction']/Cost >10)" />
</xsl:template>