【发布时间】:2012-08-27 17:32:44
【问题描述】:
<xsl:variable name="map">
<map>
<item key="Name" value="John"/>
<item key="Address" value="Un_Known"/>
<item key="Phone" value="(878)876678"/>
<item key="Last Name" value="Verner"/>
</map>
</xsl:variable>
<xsl:for-each select "$map/map/item">
<xsl:if test="./@key = $input">
<!-- cool user is asking for something know .. do something fancy -->
</xsl:if>
<xsl:for-each>
我想在我的 XSLT 中声明一个类似映射的结构,然后想要访问它。显然,我不想使用额外的名称空间,所以使用 exsl:node-set 不是我现在正在寻找的解决方案。
我正在使用 XSLT 1.0 Saxon。
有没有更好的方法来做我想做的事情?
谢谢 卡勒菲尔
下面提到的所有答案都是正确有效的。我们最终决定使用“exsl:node-set”
感谢您的建议..
【问题讨论】:
-
为什么不想使用额外的命名空间?您的意思是不想使用扩展程序?
-
坦率地说 - 我还没有研究过这是否会影响性能以及是否允许我在我正在修改的 xslt 中添加新的命名空间。
-
命名空间不一定会损害性能,也不一定意味着它会加载任何额外的代码/模块。正如@LarsH 建议的那样,您可以使用命名空间来简单地唯一限定您的 XML,并将其嵌入到您的 XSLT 中或从外部文件加载。
-
为了他们自己的利益而禁止你使用额外的命名空间是愚蠢的。这就像禁止 cmets 或新变量一样。但是,如果有人想避免使用扩展功能的可移植性问题,我可以理解。在任何情况下,都不需要使用
node-set(),正如我和 Mads 的回答所示。