我有两个XML文件在XSLT中呈现一个页面。这是因为我必须将语言与多语言网站的数据分开。我需要关联来自一个和另一个的数据来打印一个值。
我的index.xml:
<?xml version="1.0" encoding="utf-8"?>
<index>
<language>en</language>
<example>
<category id="1">
<href>/category/id/1</href>
</category>
<category id="2">
<href>/category/id/2</href>
</category>
</example>
</index>
然后我有一个类似于:
的base.en.xml<?xml version="1.0" encoding="utf-8"?>
<language>
<category id="1">Category 1</category>
<category id="2">Category 2</category>
</language>
我的不完整index.xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="language" select="document('index.en.xml'))" />
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<body>
<ul>
<xsl:apply-templates select="index/example/category" />
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="index/example/category">
<a href="{href}"></a>
</xsl:template>
</xsl:stylesheet>
最后输出所需的输出:
<html>
<head>
<title>Example</title>
</head>
<body>
<ul>
<li><a href="/category/id/1">Category 1</a></li>
<li><a href="/category/id/2">Category 2</a></li>
</ul>
</body>
</html>
提前致谢!
答案 0 :(得分:2)
document()
中的xsl:param
函数调用有额外的“)”,这违反了您的XSLT。
解决后,您可以针对language
参数执行XPATH表达式。
$language/language/category[current()/@id=@id]
在index/example/category
模板的内部,current()
指的是当前匹配的index/example/category
元素。谓词过滤器使用它@id
来选择正确的/language/category
元素。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:param name="language" select="document('index.en.xml')" />
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<body>
<ul>
<xsl:apply-templates select="index/example/category" />
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="index/example/category">
<a href="{href}"><xsl:value-of select="$language/language/category[current()/@id=@id]"/></a>
</xsl:template>
</xsl:stylesheet>