【发布时间】:2012-02-03 18:54:07
【问题描述】:
我在进行 xslt 转换时遇到了麻烦,我非常感谢您提供一些帮助。我花了很多时间在 XPath 和 XQuery 中使用各种方法。另外,我仅限于 xslt 1.0。
转换涉及对 xml 订单文件中的产品项目进行更改。原始 XML 文件包含项目,但某些行项目是折扣券参考(请参阅下面的 dsc-102 和 dsc-133)。我需要实现的是删除折扣优惠券引用的“orderDetails”节点,并将包含信息添加到它们相应的同级产品项目中(请参阅下面的转换后的 XML 示例)。每个折扣券参考在其产品名称的末尾指定其对应的产品项目(例如….[glv-001][glv-003])。
原始 XML 文件 - 以下是原始 XML 文件,其中包含 1 个订单、3 个产品项目和 2 个折扣券参考。折扣参考“dsc-102”对应于 2 个产品项目“glv-001”和“glv-003”。折扣参考“dsc-133”对应于 1 个产品项目“sho-123”。
<xmldata>
<Order>
<orderID>1010</orderID>
<custFirstName>Jim</custFirstName>
<custLastName>Jones</custLastName>
<orderDetails>
<productCode>sho-123</productCode>
<productName>Leather Windsor Shoes - size 10</productName>
</orderDetails>
<orderDetails>
<productCode>glv-001</productCode>
<productName>Leather gloves - size Small</productName>
</orderDetails>
<orderDetails>
<productCode>glv-003</productCode>
<productName>Leather gloves - size XLarge</productName>
</orderDetails>
<orderDetails>
<productCode>dsc-102</productCode>
<productName>10% Discount for Leather Gloves [glv-001][glv-003]</productName>
</orderDetails>
<orderDetails>
<productCode>dsc-133</productCode>
<productName>Free Shipping for Windsor Shoes [sho-123]</productName>
</orderDetails>
</Order>
转换后的 XML 文件 - 下面是我想要实现的转换后的 XML。转移已删除两个折扣优惠券引用,并在其对应的同级产品项目中添加了一个“discountCoupon”节点。
<xmldata>
<Orders>
<orderID>1010</orderID>
<custFirstName>Jim</custFirstName>
<custLastName>Jones</custLastName>
<orderDetails>
<productCode>sho-123</productCode>
<productName>Leather Windsor Shoes - size 10</productName>
<discountCoupon>Free Shipping for Windsor Shoes</discountCoupon>
</orderDetails>
<orderDetails>
<productCode>glv-001</productCode>
<productName>Leather gloves - size Small</productName>
<discountCoupon>10% Discount for Leather Gloves</discountCoupon>
</orderDetails>
<orderDetails>
<productCode>glv-003</productCode>
<productName>Leather gloves - size XLarge</productName>
<discountCoupon>10% Discount for Leather Gloves</discountCoupon>
</orderDetails>
</Orders>
到目前为止我所做的尝试 - 老实说,我在这个问题上取得的成功非常有限。我与它最接近的是以下内容。但是,这与我的预期结果相差甚远,“匹配”是 XLST 2.0 函数,我仅限于版本 1。
<xsl:if test="../OrderDetails[ProductCode = 'DSC-15'] and matches(ProductCode,'AH010585059',i)">DiscountCoupon</xsl:if>
如果有人能帮我解决这个问题或推动我朝着正确的方向前进,我将不胜感激。
-干杯。
【问题讨论】:
标签: xml xslt transform xslt-1.0