1

新しい製品フィードを作成していますが、次のフィールドが必要です<diff>

priceとold_priceの差が1より大きい場合:フィールドのy(はいから):<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" 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 に答える
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 に答える