【发布时间】:2019-09-03 07:56:20
【问题描述】:
我正在尝试找到一些方法来搜索产品名称中的供应商 Sku。我正在匹配供应商提要上 <vendor-product-name>Ventilateur TurboForce&#7481;&#7472; HT900C Honeywell</vendor-product-name> 中零售商提要中 <vendor-sku>HT900C</vendor-sku> 的值。
供应商供稿:
<?xml version="1.0" encoding="UTF-8"?>
<products module-id="kazfanscafr">
<product type="product" wcpc="1562772927361"><gtin>00092926109004</gtin><vendor-product-name>Ventilateur TurboForceᴹᴰ **HT900C** Honeywell</vendor-product-name><provided-by>Kaz</provided-by>
<product type="product" wcpc="1562774715788"><gtin>00092926310905</gtin><vendor-product-name>Ventilateur Turboᴹᴰ On the GO! HTF090BC Honeywell</vendor-product-name><vendor-clean-product-name>Ventilateur Turboᴹᴰ On the GO **HTF090BC** Honeywell</vendor-clean-product-name><provided-by>Kaz</provided-by>
</products>
零售商的供稿:
<product><vendor>KAZ CANADA INC</vendor><vendor-sku>**HT900C**</vendor-sku><channel-product-name>Fan, High Performance, 8", Black</channel-product-name><channel-product-id>KAZHT900C</channel-product-id><on-sale>true</on-sale><product-url>https://www.eway.ca/Eway/Product/KAZHT900C.aspx</product-url></product>
<product><vendor>KAZ CANADA INC</vendor><vendor-sku>**HTF090BC**</vendor-sku><channel-product-name>Honeywell Turbo on the Go, portable fan</channel-product-name><channel-product-id>KAZHTF090BC</channel-product-id><on-sale>true</on-sale><product-url>https://www.eway.ca/Eway/Product/KAZHTF090BC.aspx</product-url></product>
<product><vendor>KAZ CANADA INC</vendor><vendor-sku>HTF1220C</vendor-sku><channel-product-name>HONEYWELL 12" Portable Table Fan</channel-product-name><channel-product-id>KAZHTF1220C</channel-product-id><on-sale>true</on-sale><product-url>https://www.eway.ca/Eway/Product/KAZHTF1220C.aspx</product-url></product>
<product><vendor>KAZ CANADA INC</vendor><vendor-sku>HTF210BC</vendor-sku><channel-product-name>Quietset table fan</channel-product-name><channel-product-id>KAZHTF210BC</channel-product-id><on-sale>true</on-sale><product-url>https://www.eway.ca/Eway/Product/KAZHTF210BC.aspx</product-url></product>
所以我的工作基本上是在这两个提要之间找到匹配项,我需要将供应商的 SKU/GTIN 与零售商网站/提要上发布的产品 SKU/GTIN 进行匹配。我正在向产品中注入丰富的内容,因此,我需要将两个提要之间的这些 ID 匹配为渠道或桥梁。但是因为在这个案例中,我请求帮助,因为 SKU 被插入到产品名称中。
通常,我可以使用我的默认操作来搜索他们的 ID:
<xsl:call-template name="search-feeds-by-sku"> <xsl:with-param name="vendor-data-feed-field-to-compare" select="'gtin'" wcmt:editorDisplay="hidden"/> <xsl:with-param name="product-data-feed-field-to-compare" select="'gtin'" wcmt:editorDisplay="hidden"/> </xsl:call-template>
但是在这个实例上。我需要做一个子字符串或一个正则表达式来操纵结果
我已经尝试过不同的子字符串函数。由于产品名称的格式不一致,我无法使其适用于 substring-after 和 substring-before。
<method confidence="0.9" display-name="map-feed-by-name" xsi:type="map-by-virtual-feed"><product-data-matcher>/products/product[contains(vendor-sku, '{concat('vendor-product-name', " ")}')]</product-data-matcher>
</method>
所以我希望在产品名称中找到供应商 sku (HT900C),因为我通过“”(空格)连接。
输出应该是:
Ventilateur
TurboForceᴹᴰ
HT900C
Honeywell
到那时我应该得到一个匹配的 HT900C,但它什么也没返回。我想知道我是否遗漏了什么,或者根本不推荐整个方法。我使用的是 XPath 1.0,处理器是 XSLT 2.0。提前感谢您的帮助!
这是我目前的解决方案
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:import href="eway-fr-ca-fr/map-common.xml" xml:base="{$common-folder-uri}/"/>
<xsl:template match="/"<map-operation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" channel-id="eway-fr-ca-fr" module-id="kazfanscafr">
<skip-if-no-new-channel-product-found ttl-hours="720"/>
<allow-multiple-mappings/>
<methods>
<xsl:call-template name="search-feeds-by-sku"/>
<xsl:call-template name="search-feeds-by-sku">
<xsl:with-param name="vendor-data-feed-field-to-compare" select="'gtin'" wcmt:editorDisplay="hidden"/>
<xsl:with-param name="product-data-feed-field-to-compare" select="'gtin'" wcmt:editorDisplay="hidden"/>
</xsl:call-template>
<method confidence="0.9" display-name="map-feed-by-name" xsi:type="map-by-virtual-feed">
<product-data-matcher>/products/product[contains(vendor-sku, '{concat(vendor-product-name, " ")}')]</product-data-matcher>
</method>
</methods>
</map-operation>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
请说出您使用的 XPath 版本。很多人还在使用 XPath 1.0,但是在以后的版本中这种问题就容易多了。
-
如果输入格式不一致,则无法可靠解析。在给定的示例中,您似乎可以使用空格作为分隔符简单地 tokenize 输入。 XSLT 1.0 和 XSLT 2.0 中的标记化方式不同 - 请告诉我们您使用的是哪个处理器。
-
嗨。我使用的是 XPath 1.0,处理器是 XSLT 2.0
-
这毫无意义。如果处理器支持 XSLT 2.0,那么它也支持 XPath 2.0。请按照此处的说明识别您的处理器:stackoverflow.com/questions/25244370/…
-
抱歉!我使用的是遗留系统,所以我只需要询问研发团队,这就是他们为我提供的。但经检查:版本:1.0 供应商:libxslt