XSLT v1.0 - 如何使用子项创建变量[IBM WATSON XML]

时间:2017-03-14 18:19:52

标签: xml xslt watson

最佳,

目前,我们正在使用IBM Watson Explorer,共享点连接器存在问题。连接器似乎是从原始URL到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-parts”):url-parts / host,url-parts / port和url-parts / path。

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

举个例子: url-parts:www.sharepoint-domain.com/IT/PM/page_name 将通过viv:url-decompose转换为:

  • url-parts / host:www.sharepoint-domain.com
  • url-parts / path:IT / PM / page_name
  • url-parts / port:

这对我们的设置不正确:

我们需要的是:

  • url-parts / host:www.sharepoint-domain.com/IT/PM/
  • url-parts / path:page_name
  • url-parts / port:

可能有用的一个选项是:

  • 将原始的 url-parts 命名为例如的 URL-份-温度
  • 使用concat并获取 / IT / PM / 的子字符串,从 url-parts-temp 创建我们自己的 url-parts

问题

如何创建一个带子项的变量,使得这个新变量的行为好像什么都没有改变? (例如** $ 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, ... )" />

亲切的问候

1 个答案:

答案 0 :(得分:0)

首先,将第一个命名为不同的分解:

select 
  LookUpID, 
  LookUpDate 
FROM 
  [TotalQtySalesParent]
group by LookUpDate ,LookUpID
having LookUpDate =max(LookUpDate)

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

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

第三,对变量 $ url 使用 exsl:node-set

<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-parts:

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