如何在XML函数中使用XML元素

时间:2014-08-01 18:31:30

标签: xml xslt xslt-2.0

我知道从XMl生成固定宽度的文本是一种常见的需求。我之前已经问过这个问题,但由于我对XSLT函数缺乏了解,我发现的每个答案都不清楚。

我有几个使用XSLT函数将字符串填充到特定宽度的示例。但是我发现的所有例子都没有明确说明如何使用这些功能。

我需要获取XML元素的内容,并将其填充到带有空格的固定位置。我在下面的链接中找到了这样的功能。

但在每个例子中,他们传入一个字符串,例如“1234 Street”。如何通过传递<Address>1234 Street</Address>

等元素来使用此类函数

1 个答案:

答案 0 :(得分:1)

正如迈克尔已经解释的那样,如果函数需要一个字符串,那么任何参数都是字符串规范化的。如果您从FunctX中获取第一个示例,则可以执行以下操作;

输入XML

<root>
    <address>1234 Street</address>
<root>

XSLT

在下面的示例中,我假设您已复制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,这将要求处理器在将元素传递给函数之前获取元素的

您无需以任何方式更改功能体,您可以按原样使用它们。