【问题标题】:XPath/Schematron equivalent of "xsl:value-of"XPath/Schematron 等效于“xsl:value-of”
【发布时间】:2013-12-06 09:30:31
【问题描述】:

我构建了一个 schematron 模式,发现了一个意外错误。

我尝试将字符串(例如“Robinson 1983”)与 xsl 函数的输出进行比较。 我的功能是这样的

<xsl:value-of select="surname"/><xsl:text> </xsl:text><xsl:value-of select="year"/>

所以,在 schematron 中

test="'Robinson 1983' = ...function-call..."

返回“false”,因为函数的输出是由三个文本元素组成的序列。

我可以使用 xslt 解决这个问题

<xsl:variable name="output"><xsl:value-of select="...function-call..."/></xsl:variable>

test="'Robinson 1983' = $output"

按预期返回“true”。

但我想知道:如何在“纯”Schematron/XPath 中解决这个问题? 有没有等效于 xsl:value-of 的? IE。把一个序列变成一个字符串,去掉其他内容。 我认为这是您想在 XPath 中做的最重要的事情之一,但我没有找到解决方案。

【问题讨论】:

标签: xslt xpath sequence schematron


【解决方案1】:

我尝试重新创建您的示例,但它对我来说非常有效,就像您先编写代码一样。

我怀疑该函数使用了您的第一个 select 语句:

<xsl:value-of select="surname"/><xsl:text> </xsl:text><xsl:value-of select="year"/>

将这些组合值作为单个字符串返回,但您的数据实际上可能包含多组(姓氏年份)字符串。

您的数据是否可能包含多组(姓氏年份)字符串?也许您的函数无意中一次返回多组。

【讨论】:

  • 感谢您的回答!我尝试了 concat(...function-call...) 但它给出了错误“无法使用一个参数调用 Concat”,似乎在这里不起作用。莫尔先生,老实说,我真的不明白。当然,在我的数据中,姓氏字符串不止一个,而且一年多。但是该功能的目的是选择需要的,并且似乎效果很好。事实上,我得到的是“Robinson 1983”而不是“RobinsonMiller 19832010”,所以我认为这不是问题所在。但很可能是我没听懂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多