我知道从XMl生成固定宽度的文本是一种常见的需求。我之前已经问过这个问题,但由于我对XSLT函数缺乏了解,我发现的每个答案都不清楚。
我有几个使用XSLT函数将字符串填充到特定宽度的示例。但是我发现的所有例子都没有明确说明如何使用这些功能。
我需要获取XML元素的内容,并将其填充到带有空格的固定位置。我在下面的链接中找到了这样的功能。
但在每个例子中,他们传入一个字符串,例如“1234 Street”。如何通过传递<Address>1234 Street</Address>
答案 0 :(得分:1)
正如迈克尔已经解释的那样,如果函数需要一个字符串,那么任何参数都是字符串规范化的。如果您从FunctX中获取第一个示例,则可以执行以下操作;
<root>
<address>1234 Street</address>
<root>
在下面的示例中,我假设您已复制FunctX中的代码并将其绑定到命名空间(我使用funtcx
前缀)。
一种方法(.
引用上下文节点):
<xsl:template match="address">
<!-- we are now inside address element -->
<xsl:value-of select="functx:pad-string-to-length(., ' ', 20)
</xsl:template>
其他方式:
<xsl:template match="root">
<!-- we are now inside root element -->
<!-- note, this will process ALL children under "root" that match "address" -->
<xsl:value-of select="functx:pad-string-to-length(address, ' ', 20)
</xsl:template>
基本上:只需使用任何选择要传递给该函数的元素的XPath表达式即可。该函数的参数定义为xs:string
,这将要求处理器在将元素传递给函数之前获取元素的值。
您无需以任何方式更改功能体,您可以按原样使用它们。