如何通过XML/XSL根据客户关联的productId输出对应商品价格
XML到XML转换:根据productId匹配商品价格
核心实现思路
用XSL的<xsl:key>给products节点下的item建立索引,通过productId匹配itemid,快速定位对应商品的价格,避免低效的循环查找。
源XML示例
<order> <customer> <name>张三</name> <purchases> <product productId="101"/> <product productId="102"/> </purchases> </customer> <products> <item itemid="101" price="99.9"/> <item itemid="102" price="159.9"/> <item itemid="103" price="299.9"/> </products> </order>
正确的XSL转换代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 为products下的item建立索引,以itemid为匹配键 --> <xsl:key name="product-by-id" match="products/item" use="@itemid"/> <xsl:template match="/"> <output> <xsl:for-each select="order/customer/purchases/product"> <purchased-product> <product-id><xsl:value-of select="@productId"/></product-id> <!-- 通过key匹配对应item节点,提取价格 --> <price><xsl:value-of select="key('product-by-id', @productId)/@price"/></price> </purchased-product> </xsl:for-each> </output> </xsl:template> </xsl:stylesheet>
期望输出XML
<output> <purchased-product> <product-id>101</product-id> <price>99.9</price> </purchased-product> <purchased-product> <product-id>102</product-id> <price>159.9</price> </purchased-product> </output>
关键代码说明
<xsl:key>:定义索引规则,把products/item节点按itemid归类,后续可以通过键值快速查找,比逐个遍历节点高效得多。- 遍历订单商品时,用
key('product-by-id', @productId)直接匹配到对应item节点,再取出price属性值即可完成关联。
内容的提问来源于stack exchange,提问作者dolphin
相关产品推荐
相关产品推荐

