如何解决如何与xslt中的多个字符串进行比较
| 为了将xml字符串值与多个字符串进行比较,我正在执行以下操作。<xsl:if test=\"/Lines/@name = \'John\' or /Lines/@name = \'Steve\' or /Lines/@name = \'Marc\' \" >
谁能告诉我,而不是在上述情况下使用\'or \',而是如何使用xslt检查一组字符串中是否存在字符串。
谢谢。
解决方法
做到这一点的三种方法:
使用竖线(或其他适当的字符)分隔的字符串
...
<xsl:template match=
\"Lines[contains(\'|John|Steve|Mark|\',concat(\'|\',@name,\'|\')
)
]
\">
<!-- Appropriate processing here -->
</xsl:template>
.2。针对外部传递的参数进行测试。如果未在外部设置参数,并且我们使用的是XSLT 1.0,则在访问其子级之前,需要使用xxx:node-set()
扩展功能将其转换为普通节点集
<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=\"*\"/>
<!-- externally-specified parameter -->
<xsl:param name=\"pNames\">
<n>John</n>
<n>Steve</n>
<n>Mark</n>
</xsl:param>
<xsl:template match=\"Lines\">
<xsl:if test=\"@name = $pNames/*\">
<!-- Appropriate processing here -->
</xsl:if>
</xsl:template>
</xsl:stylesheet>
.3。在XSLT 2.0中比较字符串序列
<xsl:template match=\"Lines[@name=(\'John\',\'Steve\',\'Mark\')]\">
<!-- Appropriate processing here -->
</xsl:template>
, 仅XSLT 2.0:<xsl:if test=\"/Lines/@name = (\'John\',\'Marc\')\">
使用XSLT 1.0,您无法编写表示字符串序列或一组字符串的文字表达式,但是如果您知道文字值,则可以构造一组节点,例如
<xsl:stylesheet
xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
version=\"1.0\"
xmlns:data=\"http://example.com/data\"
exclude-result-prefixes=\"data\">
<data:data xmlns=\"\">
<value>John</value>
<value>Steve</value>
<value>Marc</value>
</data:data>
<xsl:variable name=\"values\" select=\"document(\'\')/xsl:stylesheet/data:data/value\"/>
<xsl:template match=\"...\">
<xsl:if test=\"/Lines/@name = $values\">..</xsl:if>
</xsl:template>
</xsl:stylesheet>
, 是的-我使用子字符串-将您的所有名字都放在一个字符串中-xsl:variable-然后如果包含true,则名称在那里
例如
<xsl:variable name=\"months\">**janfebmaraprmajjunjulaugsepoktnovdec</xsl:variable>
<xsl:if test=\"contains($months,\'feb\')\"> do stuff ...
, XPath具有some $x in (1,2,..) satisfies $x>10
表达式,可能对此有用。参见:http://www.java2s.com/Code/XML/XSLT-stylesheet/everyandsomeoperator.htm
, 对于以空格分隔的单词,您可以使用index-of(tokenize(\"list of allowed\",\"\\s+\"),\"needle\"))
或ѭ10regular来使用正则表达式,尽管我敢肯定有比这更聪明的东西。
, 其他可能性:
XPath 2.0(XSLT 2.0)
matches(/Lines/@name,\'John|Steve|Marc\')
在XSLT 1.0中,您具有EXSLT提供的类似功能ѭ12。
注意
这不是与字符串的完全匹配,而是正则表达式的匹配,在您的情况下,无论如何似乎都是合适的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。