xPath和数学函数

时间:2014-02-05 04:46:50

标签: xml wordpress xpath

我正在努力建立一个电子商务网站。我的经销商为我提供了一个实时XML数据源,因此我基本上可以在我的网站上显示他们的整个目录。我正在使用WP All Imports将此Feed解析为产品类别,这至少可以说很难。

在XML Feed中,他们提供{Price[1]}这是他们的整个销售价格。我可以编写一个数学函数来增加这个xPath的数量吗?

例如

{Price[1]}*1.2

{{Price[1]}*1.2}

3 个答案:

答案 0 :(得分:0)

是的,您可以在XPath 1.0中执行数学运算。例如,在您提供的XML文件中:

doc.xpath('//Item[ItemNo="AC45G"]/Price')
#=> <Price>422.83</Price>

doc.xpath('//Item[ItemNo="AC45G"]/Price/text()')
#=> 422.83

doc.xpath('//Item[ItemNo="AC45G"]/Price * 2')
#=> 845.66

doc.xpath('sum(//Price)')
#=> 2886778.14

doc.xpath('sum(//Price) * 2')
#=> 5773556.28

使用Ruby库Nokogiri进行测试,该库使用XPath下的非常标准的libxml2

但是,WordPress“All Imports”插件仅显示use XPath for filtering。您最好的选择是尝试使用语法{Price[1] * 1.2}并查看是否有效,因为{…}似乎是XPath表达式的分隔符。您也可以尝试{Price[1]/text() * 1.2}更明确。

答案 1 :(得分:0)

很抱歉发布这个答案花了这么长时间,但我想出了WordPress WP All Import产品标记问题。

首先,您必须将此脚本添加到主题功能页面(我选择将其添加到开头,这样我就不必在我想要更改标记的时候追逐它):

function add_markup($x) {
 $markup = 1.2;
 $y = $x * $markup;
 return $y;
}

上述脚本会将您的产品标记为20%。只需编辑$ markup = 1.2;什么你想要你的保证金。确保将其输入1.a数字,这样会增加您的产品价格。这里不包括数字会降低产品价格的百分比。例如

function add_markup($x) {
 $markup = 0.3;
 $y = $x * $markup;
 return $y;
}

将价格降低30%。

然后在WP All Imports WooCommerce Products页面的“常规价格($)”框中,您需要输入这个我输入括号和所有

的方式。
[add_markup({Price[1]})]

// //截图 http://cpgroup-inc.com/images/Untitled.png

答案 2 :(得分:0)

我想为你提供这个,因为我已经工作了很长一段时间,因为我没有解决方案。这真的是您需要的唯一解决方案。 有了这个,您可以告诉WP所有导入,当它导入产品时,它必须查看该项目属于哪个价格类别,然后设置分配的标记。 您可以下载&#34;自定义功能&#34; WordPress的插件,粘贴下面的@WilliamCornettPMP和@Phrogz说,导入时只需将[add_markup({Price[1]})]放在价格字段中。

   function add_markup($x) {
    if ($x>0 && $x<500) 
    $markup=1.482;
    else
    if ($x>501 && $x<1000)
    $markup=1.333;
    else
    if ($x>1001 && $x<4000)
    $markup=1.231;
    else
    if ($x>4001 && $x<8000)
    $markup=1.220;
    else
    if ($x>8001 && $x<10000)
    $markup=1.197;
    else
    if ($x>10001 && $x<15000)
    $markup=1.186;
    else
    if ($x>15001 && $x<20000)
    $markup=1.186;
    else
    if ($x>20001 && $x<25000)
    $markup=1.174;
    else
    if ($x>25000)
    $markup=1.166;
    return $x*$markup;
}