2

ここで多くの Q&A を見てきましたが、開始/完了の方法にまだ苦労しています (xslt/xml に堪能ではありません)。XML フィードを作成する XSL があります。さらに、ブランドを検索し、国と ID を返す必要がある XML ファイルが与えられました。

brand_country.xml ファイルの内容:

<Make>
   <man_id>22</man_id>
   <man_name>Bentley</man_name>
   <man_country>Britain</man_country>
   <_type_>car</_type_>
</Make>
<Make>
   <man_id>23</man_id>
   <man_name>Benz</man_name>
   <man_country>Germany</man_country>
   <_type_>car</_type_>
</Make>
<Make>
   <man_id>24</man_id>
   <man_name>Berkley</man_name>
   <man_country>Britain</man_country>
   <_type_>car</_type_>
</Make>
<Make>
   <man_id>25</man_id>
   <man_name>Bitter</man_name>
   <man_country>Germany</man_country>
   <_type_>car</_type_>
</Make>
<Make>
   <man_id>28</man_id>
   <man_name>BMW</man_name>
   <man_country>Germany</man_country>
   <_type_>car</_type_>
</Make>

今私のxslで私は

<xsl:for-each select="entries/entry">

 <root>
  <channel>
   <ad>
    <category_id>1</category_id>
    <ad_id><xsl:value-of select="id" /></ad_id>
    <locale>en</locale>
    <country>n/a</country>
    <make_id><xsl:value-of select="fields/field_make/data" /> </make_id>
    <year><xsl:value-of select="fields/field_year/data" /></year>
    <handling><xsl:value-of select="fields/field_lhdrhd/data" /></handling>
    <heading><xsl:value-of select="fields/field_make/data" /> <xsl:text> </xsl:text> <xsl:value-of select="name" /></heading>
    <reg_no> </reg_no>
    <chassis_no><xsl:value-of select="fields/field_chassis_nr/data" /></chassis_no>
    <engine_no> </engine_no>

    <price_type>
     <xsl:choose>
      <xsl:when test="string-length( fields/field_price_poa/data )">
       <xsl:text>POA</xsl:text>
      </xsl:when>
      <xsl:otherwise>Asking Pricefix</xsl:otherwise>
     </xsl:choose>
    </price_type>
    <price>
     <xsl:choose>
      <xsl:when test="string-length( fields/field_price_poa/data )">
       <xsl:text> </xsl:text>
      </xsl:when>
      <xsl:otherwise>
       <xsl:value-of select="fields/field_price/data" />
      </xsl:otherwise>
     </xsl:choose>
    </price>


    <currency_id>
     <xsl:choose>
      <xsl:when test="fields/field_currency/data = 'GBP'"> 
       <xsl:text>20</xsl:text>
      </xsl:when>
      <xsl:when test="fields/field_currency/data = 'USD'"> 
       <xsl:text>10</xsl:text>
      </xsl:when>               
     </xsl:choose>     
    </currency_id>   

   </ad>

  </channel>
 </root>
</xsl:for-each>

これは、現在のフィードに必要なものです。

今、私は…のコンテンツを使用する必要があります.</p>

<xsl:value-of select="fields/field_make/data" />

…brand_country.xml ファイルを検索して、以下を見つけます。

  1. の「id」を返す<make_id>... </make_id>
  2. *"_manufactured_in"* を返します<country> ... </country>

これは私がこれまでに持っているものです:

(cut....)
    <xsl:key name="mancountry" match="man_country" use="../man_name"/>
    <xsl:key name="manid" match="man_id" use="../man_name"/>

 <xsl:template match="/section|/category|/entry_details">

   <xsl:for-each select="entries/entry">
    <root>
    <channel>
     <ad>
      <category_id>1</category_id>
      <ad_id><xsl:value-of select="id" /></ad_id>
      <locale>en</locale>
      <xsl:variable name="inputmake" select="fields/field_make/data"/>

      <country> 
      <xsl:for-each select="document('http://www.xxx.yyy/dev/feed_data/brand_country.xml')">
             <xsl:variable name="value" select="key('mancountry',$inputmake)"/>
             <xsl:choose>
               <xsl:when test="$value">
                 <xsl:value-of select="$value"/>  
               </xsl:when>
               <xsl:otherwise>world</xsl:otherwise>
             </xsl:choose>
           </xsl:for-each>
      </country>
(cut....)

助けやヒントをいただければ幸いです。

4

1 に答える 1

2

XSLT 2.0 では、以下をトップレベル コードとして の中に入れますxsl:stylesheet

<xsl:param name="lk" select="'brand_country.xml'"/>
<xsl:variable name="lk-doc" select="doc($lk)"/>

<xsl:key name="brand" match="Make" use="man_name"/>

値を検索するには、単に使用します

<xsl:variable name="make" select="key('brand', fields/field_make/data, $lk-doc)"/>

それぞれ

<country><xsl:value-of select="$make/man_country"/></country>

XSLT 1.0 を使用すると、

<xsl:param name="lk" select="'brand_country.xml'"/>
<xsl:variable name="lk-doc" select="document($lk)"/>

<xsl:key name="brand" match="Make" use="man_name"/>

それから

<xsl:variable name="this" select="."/>

<xsl:for-each select="$lk-doc">
  <xsl:variable name="make" select="key('brand', $this/field_make/data)"/>
  <country><xsl:value-of select="$make/man_country"/></country>
</xsl:for-each>
于 2013-07-28T12:49:14.893 に答える