在WP All Import中用XPath映射XML产品属性及处理多值问题
产品XML导入的属性映射与多值拆分问题
我需要将XML文件中的产品导入到站点,核心需求包括:
- 将XML中名称不一致、顺序混乱的属性映射为站点自定义属性(例如站点的「材质」对应XML中的「Υλικό Κατασκευής」)
- 将逗号分隔的属性多值拆分为独立对象
现有XML包含数千个多类别产品,属性数量不一,且部分属性名称与站点不匹配。我尝试了两种方法,但都存在问题:
方法1:XPath表达式失效
使用的XPath表达式:
{(attr/text[../name/text()="Υλικό Κατασκευής"]/text())}
问题:返回空值,无法获取目标属性内容。
方法2:自定义PHP函数的多值冲突问题
自定义函数代码:
function my_get_attribute_value( $attr, $name, $value ) { if ( empty( $name ) || empty( $value ) ) return; $names = explode( ", ", $name[0] ); $values = explode( ", ", $value[0] ); foreach ( $names as $key => $v ) { if ( $v == $attr && array_key_exists( $key, $values ) ) { return $values[ $key ]; } } }
调用方式:
[my_get_attribute_value("Χρώμα Ανάρτησης",array({attributes/attr/name}),array({attributes/attr/text}))]
问题:当属性值为逗号分隔的多值(如「Γυαλί, Κρύσταλλα, Μέταλλο」)时,会打乱后续属性的映射结果——当前属性仅显示第一个值,下一个属性错误显示该多值的第二个值,导致映射完全混乱。
示例XML代码
<product> <id>314</id> <name> <![CDATA[ InLight Κρεμαστό φωτιστικό από διάφανο γυαλί και κρύσταλλα 3XE14 D:55cm (5314-3-CLEAR) ]]> </name> <image> <![CDATA[ https://www.moraitis.com/image/2019-2020/5314-3 DIAFANO.jpg ]]> </image> <additional_image> <![CDATA[ https://www.moraitis.com/image/2019-2020/5314-3 GIALI SKITSO.jpg ]]> </additional_image> <code>5314-3-CLEAR</code> <ean>314</ean> <mpn>314</mpn> <isbn/> <rec_fee>0.3</rec_fee> <price_without_vat>103.95</price_without_vat> <price_with_vat>128.90</price_with_vat> <manufacturer> <![CDATA[ InLight ]]> </manufacturer> <url> <![CDATA[ https://www.moraitis.com/Κρεμαστό φωτιστικό από διάφανο γυαλί και κρύσταλλα 3XE14 D:55cm (5314-3-CLEAR) ]]> </url> <url_non_seo> <![CDATA[ https://www.moraitis.com/&path=209&product_id=314 ]]> </url_non_seo> <category> <![CDATA[ Φωτιστικά ]]> </category> <category_id> <![CDATA[ 209 ]]> </category_id> <category_id_path> <![CDATA[ 209 ]]> </category_id_path> <cat_tree> <cat> <![CDATA[ Φωτιστικά ]]> </cat> <cat> <![CDATA[ Φωτιστικά Οροφής ]]> </cat> <cat> <![CDATA[ Κρεμαστά Φωτιστικά ]]> </cat> </cat_tree> <weight>3.50</weight> <weight_if_in_grams>4</weight_if_in_grams> <weight_if_in_kg>3.50 kg</weight_if_in_kg> <dimensions> <length>42.00</length> <width>36.00</width> <height>23.00</height> </dimensions> <instock>Y</instock> <availability>Παράδοση σε 4 - 10 ημέρες</availability> <size/> <shipping/> <description> <![CDATA[ Πρόκειται για ένα διάφανο γυάλινο κρεμαστό φωτιστικό με τρεις λαμπτήρες. Τόσο τα διάφανα κρύσταλλα που κρέμονται όσο και οι χρώμιο μεταλλικές λεπτομέρειες του προσδίδουν μια επιπλέον λάμψη. Η χρώμιο μεταλλική ανάρτηση είναι ρυθμιζόμενη και προσαρμόζεται στον κάθε χώρο. ]]> </description> <attributes> <attr> <name> <![CDATA[ Dimmable ]]> </name> <text> <![CDATA[ Ναι ]]> </text> </attr> <attr> <name> <![CDATA[ Αριθμός Λαμπτήρων ]]> </name> <text> <![CDATA[ 3 ]]> </text> </attr> <attr> <name> Βαθμός Προστασίας </name> <text> IP20 </text> </attr> <attr> <name> <![CDATA[ Λαμπτήρας ]]> </name> <text> <![CDATA[ Ε14 ]]> </text> </attr> <attr> <name> <![CDATA[ Με Λαμπτήρα ]]> </name> <text> <![CDATA[ Όχι ]]> </text> </attr> <attr> <name> <![CDATA[ Τοποθέτηση ]]> </name> <text> <![CDATA[ Οροφή ]]> </text> </attr> <attr> <name> <![CDATA[ Υλικό Κατασκευής ]]> </name> <text> <![CDATA[ Γυαλί, Κρύσταλλα, Μέταλλο ]]> </text> </attr> <attr> <name> <![CDATA[ Χρώμα Ανάρτησης ]]> </name> <text> <![CDATA[ Χρώμιο ]]> </text> </attr> <attr> <name> <![CDATA[ Χρώμα Γυαλιού ]]> </name> <text> <![CDATA[ Διάφανο ]]> </text> </attr> <attr> <name> <![CDATA[ Χρώμα Κρυστάλλου ]]> </name> <text> <![CDATA[ Διάφανο ]]> </text> </attr> </attributes> </product>
内容的提问来源于stack exchange,提问作者Yiannis
相关产品推荐
相关产品推荐

