【问题标题】:How can I add headers/footers to a text output in a XSLT transformation?如何将页眉/页脚添加到 XSLT 转换中的文本输出?
【发布时间】:2015-04-05 22:56:35
【问题描述】:

我在 Datapower 中的 XSLT 转换中需要以下行为:

输入文字:

AAAAAZZZZZZZ
BBBBBZZZZZZZ
CCCCCZZZZZZZ

输出文本:

_HEADER
AAAAA
BBBBB
CCCCC
_FOOTER

所以我编写了以下 XSLT:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:dp="http://www.datapower.com/extensions"
  xmlns:str="http://exslt.org/strings"
  xmlns:date="http://exslt.org/dates-and-times"
  extension-element-prefixes="dp str date"
>
  <dp:input-mapping  href="store:///pkcs7-convert-input.ffd" type="ffd"/>

  <xsl:output method="text"/>

  <xsl:variable name="rowsep" select="'&#10;'"/>
  <xsl:variable name="input64" select="dp:binary-encode(/object/message/node())"/> 
   <xsl:variable name="str" select="dp:decode($input64,'base-64')"/>

  <xsl:template match="/">

    <!-- Header -->

    <xsl:text>_HEADER&#10;</xsl:text>

    <!-- Body -->

      <xsl:for-each select="str:split($str,$rowsep)">
        <xsl:if test="position()!=last()">
            <xsl:value-of select="substring(.,1,5)"/>
            <xsl:text>&#10;</xsl:text>
        </xsl:if>
      </xsl:for-each>

      <!-- Trailer -->  

    <xsl:text>_FOOTER&#10;</xsl:text>

</xsl:template>  
</xsl:stylesheet>

但它正在生成以下输出:

_HEADER
_HEAD
AAAAA
BBBBB
CCCCC
_FOOTER

我不明白为什么 for-each 标记之外的每个文本或 value-of 标记都会生成奇怪的输出(或者至少我无法找到错误的模式)。如您所见,标头“部分”重复,不知道这种行为的原因。

能否请您给我一些提示,说明错误在哪里?

【问题讨论】:

  • 您在此处展示的 XSLT 样式表暴露了这种行为?如果是这样,您能否包含$str 的值?
  • $str 是 /object/message/node(),表示整个输入内容:
  • 我能够在 DataPower vm 上运行您的代码并获得预期的结果。您最好的选择可能是通过添加一个输出 $input64 内容的xsl:value-of 行进行调试,然后转到一些在线 Base64 转换器并查看您是否真的正确获取了输入数据(包括行尾)。跨度>
  • 谢谢@bjimba,似乎很好,包括行尾。我看到的是行为中的一种缓冲,如您所见,_HEADER 存储为 for each 的第一个元素......您在 DP 中究竟如何测试这种场景?我正在使用多协议网关,请求和响应类型为非 XML。
  • 我使用的是带有非 XML 请求和环回的 XMLFW。处理策略有一个规则(客户端到服务器),该规则的唯一操作是使用您的确切 XSL 代码的“转换二进制文件”和结果操作。我使用 curl 发送输入:curl --data-binary @nonxml-in.txt http://mydphost:8009/ 你打开探针了吗?你的输入上下文是什么样的?

标签: xml xslt ibm-datapower


【解决方案1】:

解决了!...这是我的错...我对 XSLT 失败的想法很封闭。但我应用了两次转换:在 MPG 和后端。这就解释了奇怪的行为。

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2020-07-23
    • 2021-03-22
    相关资源
    最近更新 更多