【发布时间】: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'><!DOCTYPE html></xsl:text>
<html>
<head>
<title>Movie database</title>
</head>
<body>
<xsl:apply-templates select='//movie[not(..//movie//gross/number(translate(.," ,$","")) > .//gross/number(translate(.," ,$","")))]/title'/>
</body>
</html>
</xsl:template>
<xsl:template match='//movie[not(..//movie//gross/number(translate(.," ,$","")) > .//gross/number(translate(.," ,$","")))]/title'>
... do something
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
在 XSLT 1.0 中,您不能将函数用作定位步骤。因此,如果不执行初步传递将金额转换为数字,就无法使用您尝试使用的方法。