xslt - XSLT 3.0 如何在一个元素中连接特定元素文本
问题描述
嗨,我有这个示例,其中包含多个产品,每个产品都有元素 <main_image>text</main_image>,然后每个产品都有其他元素 <image_ >text...</image_ >。我想将它们全部合并到包含 <image_*> 到由逗号 (,) 分隔的 <main_image> 的元素中。
<shop>
<products>
<product>
<price>176.5500</price>
<pricecustomer>154.4812</pricecustomer>
<product_id>6167</product_id>
<model>BUN-001</model>
<ean></ean>
<mpn>BUN-001</mpn>
<isbn>0</isbn>
<minimum>1</minimum>
<tax_class>1</tax_class>
<quantity>0</quantity>
<main_image>https://www.test.com/image/products/Bundles/bundle-001.jpg</main_image>
<manufacturer></manufacturer>
<varos>0.00000000</varos>
<mikos>0.00000000</mikos>
<platos>0.00000000</platos>
<ipsos>0.00000000</ipsos>
<status>Published</status>
<image_1>https://www.test.com/image/products/beper/bt.200/BT.200.jpg</image_1>
<image_2>https://www.test.com/image/products/beper/bt.200/BT.200-1.jpg</image_2>
<image_3>https://www.test.com/image/products/zilan/zln7887/ZLN7887.jpg</image_3>
</product>
</products>
</shop>
我想要的结果就是这个
<shop>
<products>
<product>
<price>176.5500</price>
<pricecustomer>154.4812</pricecustomer>
<product_id>6167</product_id>
<model>BUN-001</model>
<ean></ean>
<mpn>BUN-001</mpn>
<isbn>0</isbn>
<minimum>1</minimum>
<tax_class>1</tax_class>
<quantity>0</quantity>
<main_image>https://www.test.com/image/products/Bundles/bundle-001.jpg,https://www.test.com/image/products/beper/bt.200/BT.200.jpg,https://www.test.com/image/products/beper/bt.200/BT.200-1.jpg,https://www.test.com/image/products/zilan/zln7887/ZLN7887.jpg</main_image>
<manufacturer></manufacturer>
<varos>0.00000000</varos>
<mikos>0.00000000</mikos>
<platos>0.00000000</platos>
<ipsos>0.00000000</ipsos>
<status>Published</status>
<image_1>https://www.test.com/image/products/beper/bt.200/BT.200.jpg</image_1>
<image_2>https://www.test.com/image/products/beper/bt.200/BT.200-1.jpg</image_2>
<image_3>https://www.test.com/image/products/zilan/zln7887/ZLN7887.jpg</image_3>
</product>
</products>
</shop>
我已经用 XSLT 试过这个代码片段
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="main_image">
<xsl:value-of select="if (../../../main_image/text()) then string-join((image_*/text()), ',') else ''"/>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
结果根本没有主图像,我错过了什么?感谢您的任何帮助
解决方案
您可以使用
<xsl:template match="main_image">
<xsl:copy>
<xsl:value-of select="., ../*[matches(local-name(), '^image_')]" separator=","/>
</xsl:copy>
</xsl:template>
推荐阅读
- sql-server - 使用 Telegraf 和 Influx 监控 Azure SQL 数据库
- angular - 使用 ngx 数据表切换列
- java - 我怎样才能打破一个字符串
标记到地图集合中并为其分配布尔值(如果存在)? - php - Outlook 中的 IMAP_OPEN 无法使用 PHP
- python - 读取 csv 文件时 MS Databricks Spark 中绝对 URI 中的相对路径
- sapui5 - sap.tnt.NavigationListItem 的稳定 ID(id 与键)
- javascript - 对购物车部分中的产品列表做出反应
- postgresql - 在 postgreSQL 中将文本转换为时间戳
- scrapy - 如何在收到 SIGINT 或 Scrapyd 的 cancel.json 调用时回调 Scrapy spider 方法?
- riscv - 带有 riscv64 的线程本地存储