【问题标题】:Valid XPath expression doesn't work in XSLT有效的 XPath 表达式在 XSLT 中不起作用
【发布时间】:2021-04-05 14:18:50
【问题描述】:

我正在开发一个使用 XSLT 将我的 .xml 文件转换为 .html 的项目,但我遇到了一些问题。我有一个 XPath 表达式,它成功地返回了票房最高的电影的标题,但是当我尝试在 <xsl:apply-templates select='my xpath'/><xsl:template match='my xpath'/> 中使用它时,它不起作用。我正在使用 Visual Studio,但出现错误:

预期的令牌')',找到'('

这是我第一次使用 XPath、XSLT 和 XML 做一些事情,所以当我的 XPath 表达式在 XSLT 之外正常工作时,我真的不知道是什么问题。

.xml 文件的相关部分:

<movie_database>
  <movies>

    <movie>
      <title>Movie 1</title>
      <finance_records>
        <gross>56,000,000 $</gross>
      </finance_records>      
    </movie>
    
    <movie>
      <title>Movie 2</title>
      <finance_records>
        <gross>150,100,055 $</gross>
      </finance_records>       
    </movie>
    
    <movie>
      <title>Movie 3</title>
      <finance_records>
        <gross>100,577,000 $</gross>
      </finance_records>       
    </movie>
  </movies>
</movie_database>

我的 .xsl 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" encoding="UTF-8" indent="yes"/>

  <xsl:template match="/">
    <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>
    <html>
      <head>
        <title>Movie database</title>
      </head>
      
      <body>
          <xsl:apply-templates select='//movie[not(..//movie//gross/number(translate(.," ,$","")) &gt; .//gross/number(translate(.," ,$","")))]/title'/>   
      </body>
    </html>
  </xsl:template>

  <xsl:template match='//movie[not(..//movie//gross/number(translate(.," ,$","")) &gt; .//gross/number(translate(.," ,$","")))]/title'>
       ... do something
  </xsl:template>
</xsl:stylesheet>

【问题讨论】:

  • 在 XSLT 1.0 中,您不能将函数用作定位步骤。因此,如果不执行初步传递将金额转换为数字,就无法使用您尝试使用的方法。

标签: html xml xslt xpath


【解决方案1】:

在 XPath 2.0 中允许在“/”运算符的 RHS 上使用类似 number() 的函数调用,但在 XPath 1.0 中不允许。您正在使用 XSLT 1.0 处理器,它只支持 XPath 1.0。

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2022-01-14
    相关资源
    最近更新 更多