检查字符串数组中是否存在字符串XSL
问题描述:
是否可以检查字符串数组中是否存在字符串? 我有以下XML:检查字符串数组中是否存在字符串XSL
<?xml version="1.0" encoding="UTF-8"?>
<ItemsArr>
<it attr="DANCHO">
<title>1</title>
</it>
<it attr="DAN">
<title>2</title>
</it>
<it attr="IVANCHO">
<title>3</title>
</it>
<it attr="DRAGANCHO">
<title>4</title>
</it>
<it attr="PETKANCHO">
<title>5</title>
</it>
<keys>
<itemKey>DANCHO</itemKey>
<itemKey>THISISONLYFORTESTING</itemKey>
</keys>
</ItemsArr>
而下面的XSL转换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:variable name="items" select="ItemsArr/keys/itemKey"/>
<xsl:for-each select="/ItemsArr/it[contains($items,@attr)]">
<tr>
<td><xsl:value-of select="@attr"/></td>
<td><xsl:value-of select="title"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想所有的按键(ItemsArr /键)存放在数组($ items),然后迭代它的值,这些值存在于$ items数组中。 请注意,有了上述数据,它们都被选中。 如果两个键被交换(DANCHO和THISISONLYFORTESTING),则不会选择任何内容。
答
contains
实际上是一个字符串函数,它检查第一个字符串是否包含第二个字符串。它不是为了在节点集上工作而设计的(在XSLT 1.0中,如果您将它传递给节点集,它将获得该集合中第一个节点的文本值,在XSLT 2.0中会出现错误)。
你可以使用,而不是表达仅仅是这样...
<xsl:for-each select="/ItemsArr/it[@attr = $items/text()]">
因此,如果attr
属性的任何节点集合中的项目的文本节点匹配的将是真实的。
或者,考虑使用密钥更有效地查找值。
<xsl:key name="items" match="itemKey" use="text()" />
那么你会看它这样
<xsl:for-each select="/ItemsArr/it[key('items', @attr)]">
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="items" match="itemKey" use="text()" />
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:variable name="items" select="ItemsArr/keys/itemKey"/>
<xsl:for-each select="/ItemsArr/it[key('items', @attr)]">
<tr>
<td><xsl:value-of select="@attr"/></td>
<td><xsl:value-of select="title"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答
你应该说明你的问题,你没怎么想你想解决它,因为没有阵列数据结构在XSLT 1或2.
如果您的问题是要实现一个数据结构,您可以n查阅这是xsl:key的用途。所以你应该阅读xsl:key和关键函数。
,然后在你的代码键(“阵列”,pathToLookupValue)会告诉你,在你提供的路径值是否在您设置了关键的存在。
这正是我需要的!愚蠢的我......我是XSL的新手,你们帮了我很多。我会坚持你提供的第一个解决方案。 – 2015-01-21 09:01:28