XSLT v1.0 - 如何创建带有子项的变量 [IBM WATSON XML]

XSLT v1.0 - how to create a variable with children [ IBM WATSON XML]

最佳,

此时,我们正在使用 IBM Watson Explorer,共享点连接器出现问题。连接器似乎进行了从原始 "wrong" 到 WATSON URL 的转换,这就是我们试图通过 XSLT 1.0 修复的问题。

      <xsl:variable name="url-tokens" select="str:tokenize($seed-urls, '&#10;')" />
      <xsl:variable name="fixed-urls">

        <!-- &#10; == newline -->
        <xsl:for-each select="$url-tokens">
          <xsl:variable name="url-parts" select="viv:url-decompose(.)" />
          <!-- Append a slash ("/") to the path, unless the path already has a slash, or ends in ".aspx" -->
          <xsl:variable name="fixed-path" select="concat($url-parts/path,viv:if-else(viv:match($url-parts/path, '(\.aspx|\/)$'),'','/'))" />

          <!-- Rebuild the URL, but use the io-sp protocol and the fixed path (constructed above) -->

          <xsl:value-of select="viv:url-build($crawl-protocol, '', '', $url-parts/host, $url-parts/port, $fixed-path, '')" />
          <xsl:value-of select="'&#10;'" />
        </xsl:for-each>
      </xsl:variable>

viv:url-decompose 将基本的 url 转换为以下部分 ("url-parts"):url-parts/host、url-parts/port 和 url-parts/path。

Watson URL 基于 url-parts/host 和 url-parts/path 的串联。然而,我们认为这种分解并不像我们预期的那样有效。所以因为我们不能删除任何代码,所以我们一直在尝试创建一个具有正确命名的变体。

举个例子: url-部分:www.sharepoint-域。com/IT/PM/page_name 将通过 viv:url-decompose 转换为:

这对我们的设置不正确:

我们需要的是:

一个可能有效的选项是:

问题

如何创建一个带有子变量的变量,使这个新变量的行为就像什么都没有改变一样? (例如 ** $url-parts/host** 和 ** $url-parts/path** 必须仍按原计划工作)

因此

<xsl:variable name="url-parts-temp" select="viv:url-decompose(.)" />
<!-- Magic
<xsl:variable name="url-parts/host" select="concat($url-parts/host,'/IT/PM/'" />
<xsl:variable name="url-parts/path" select="substring($url-parts/path,6)" />
<xsl:variable name="url-parts/port" select="$url-parts-temp/port" />
-->
<xsl:variable name="fixed-path" select="concat($url-parts/path, ... )" />

亲切的问候

首先,给第一个分解起个不同的名字:

<xsl:variable name="url-parts-temp" select="viv:url-decompose(.)" />

其次,创建一个变量 url 及其所属值:

<xsl:variable name="url">
    <path><xsl:value-of select="substring($url-parts-temp/path,string-length('it/pm')+2)"/></path>
    <host><xsl:value-of select="concat($url-parts-temp/host,$url-parts-temp/path)"/></host>
    <port>$url-parts-temp/port</port>
    <query>$url-parts-temp/query</query>
</xsl:variable>

第三,对变量$url:

使用exsl:node-set
<xsl:variable name="url-parts" select="exsl:node-set($url)" />

结果 现在您可以使用 url 部分,就像以前一样:

<xsl:value-of select="$url-parts/host" />
<xsl:value-of select="$url-parts/path" />