1

我正在创建一个新的 productfeed 并且需要以下字段:<diff>.

如果 price 和 old_price 之间的差异大于 1:字段中的 y(来自 Yes):<diff>

如果 price 和 old_price 之间的差异为 1 或小于 1:字段中的 n(来自 No):<diff>

文件:Data.xml

<?xml version="1.0"?>
<products>
 <product id="0001">
  <price>120.00</price>
  <old_price>125.00</old_price>
 </product>
 <product id="0002">
  <price>5.00</price>
  <old_price>5.50</old_price>
 </product>  
</products>

期望输出:

<?xml version="1.0"?>
<products>
 <product id="0001">
  <diff>y</diff>
 </product>
 <product id="0002">
  <diff>n</diff>
 </product>  
</products>
4

2 回答 2

0

试一试:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="price[translate(. - ../old_price, '-', '') > 1]">
    <diff>y</diff>
  </xsl:template>
  <xsl:template match="price">
    <diff>n</diff>
  </xsl:template>
  <xsl:template match="old_price" />
</xsl:stylesheet>

在您的示例输入上运行时,这会产生:

<products>
  <product id="0001">
    <diff>y</diff>
  </product>
  <product id="0002">
    <diff>n</diff>
  </product>
</products>
于 2013-03-15T14:32:21.273 回答
0

我还没有测试过,但它应该是这样的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
    <xsl:template match="/">
       <products>
       <xsl:for-each select="//product">
           <diff>
           <xsl:choose>
             <xsl:when test="price - old_price &gt; 1">
              y
             </xsl:when>
             <xsl:otherwise>
              n
             </xsl:otherwise>
           </xsl:choose>
         </diff>
         <xsl:copy-of select="*" />
       </xsl:for-each>
       </products>
    </xsl:template>
</xsl:stylesheet>

将测试并更新

于 2013-03-15T14:25:42.570 回答