我有一个正在工作的XSLT 2或3进程,其中将单个字符串作为参数传递到XSL模板。对于这个任务,我传递一个姓氏,用于在多个XML文档中找到所有<person>
元素,其中它的子元素是<nL>
,最后一个元素与我传递的参数匹配。这工作,但我想修改我的XPATH表达式,以便能够传递逗号分隔参数。例如,我现在可以通过surname =“Johnson”,但希望能够通过surname =“Johnson,Johnston”如何匹配XPATH中谓词变量中的值
我在java中使用最新的Saxon处理器。我调用转换与
java net.sf.saxon.Transform -s:all-sources.xml -xsl:xsl/index-person-param.xsl surname="Johnson"
全sources.xml中的其他XML文件的XML格式化列表。
我将只包含我的代码的一小部分,除非需要更多的代码。这可能是一个简单的XPATH问题,我只是不明白。
目前我的模板匹配之前,我有这个参数声明
<xsl:param name="surname" as="xs:string" required="yes"/>
然后我发现所有的匹配<person>
元素与下面的变量
<xsl:variable name="nameMatch" select="document(/files/file/@filename)//person[nL = $surname]"/>
这工作时,$姓变量是一个单词的字符串。我如何修改上面的谓词,以便$ surname可以包含用逗号分隔的两个或多个单词?
我已经尝试过使用tokenize()
和进行了一些更改,但我仍未找到可行的解决方案。 谢谢, 迈克尔
你有没有尝试过这些:https://stackoverflow.com/questions/6357166/how-to-compare-against-multiple-strings-in-xslt – Lesiak
我通过你提供的线程搜索并找到了解决方案。我已将'select =“文档(/ files/file/@ filename)// person [nL = $ surname]”'更改为'select =“document(/ files/file/@ filename)// person [matches (nL,$姓氏)]“'这给了我想要的结果。非常感谢 – Sawtooth67