我正在尝试为每个页面上的每一个做一个:
<xsl:for-each select="/root/page">
<xsl:value-of select="/root/titles/@page/"/>
</xsl:for-each>
示例XML;
<root>
<titles>
<en>A title</en>
<de>Ein Titel</de>
</titles>
<page title="de">
....
</page>
</root>
我遇到的问题是XPath没有解析为/root/titles/de/...
我怎样才能让它发挥作用?
答案 0 :(得分:1)
<强>更新强>
<xsl:for-each select="/root/page">
<xsl:variable name="language" select="@title"/>
<xsl:value-of select="/root/titles/*[name()=$language]"/>
</xsl:for-each>
现在它适合我!
答案 1 :(得分:1)
您想要的并不是很清楚,但看起来您应该知道xsl:for-each
将上下文更改为所选节点,就像模板一样。所以这可能会让你到达某个地方:
<xsl:for-each select="/root/page">
<xsl:value-of select="/root/titles/*[name()=current()/@title]"/>
</xsl:for-each>
希望这有帮助。
答案 2 :(得分:1)
使用xsl:key
。由于不清楚您需要的输出,我只提供了一个示例,说明如何根据页面语言为每个title
titles
获取page
。
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="titles" match="titles/*" use="local-name()"/>
<xsl:template match="/root">
<xsl:for-each select="page">
<xsl:value-of select="concat('title-',@title,key('titles',@title),'
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于此输入
<?xml version="1.0" encoding="UTF-8"?>
<root>
<titles>
<en>A title</en>
<de>Ein Titel</de>
</titles>
<page title="de">
....
</page>
<page title="en">
....
</page>
</root>
产生
title-de:Ein Titel
title-en:A title
在Mozilla Firefox 3.6.17上测试如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test_trans.xsl"?>
<root>
<titles>
<en>A title</en>
<de>Ein Titel</de>
</titles>
<page title="de">
....
</page>
<page title="en">
....
</page>
</root>
可生产
title-deEin Titeltitle-enA title
显然没有新行,因为我们在浏览器中显示它,并且应该改变转换以生成HTML。
答案 3 :(得分:0)
<xsl:for-each select="/root/page">
<xsl:variable name="language" select="@title"\>
<xsl:value-of select="/root/titles/$language"/>
</xsl:for-each>