如何使用XSLT从XML文件创建RSS 2.0源?

时间:2011-02-08 20:21:27

标签: xml xslt rss

我想弄清楚我是否正确理解这个问题。

我有一个来自网站的XML文件,其中列出了该网站的所有数据。我正在尝试创建RSS 2.0 Feed,以便我可以将数据Feed上传到Google产品。 XML文件包含太多信息;我只想从中获取产品并将它们放入一个较小的XML或RSS文件中,其中包含特定于Google所需的频道和标签。

我被告知要使用XSLT样式表。它看起来像是最终项目的空模板吗?

E.g。

< channel >  
< product >  
< othertags >

我是否需要在XML文件上运行一个小脚本来填充最终产品?

最简单的脚本编写方法是什么?我能用bash做吗?

编辑:
我看到能够在Dreamweaver中附加XSLT样式表;有谁知道这个?

NEWEDIT: 我做了更多的研究,并让XSLTPalette在OSX上工作。我用一个随机的XSLTsheet测试了一小段XML文件,结果很好。我尝试创建的XSLT表使用以下参数:

<item>
  <title>
    <![CDATA[titlegoeshere]]>
  </title>
  <description>
    <![CDATA[general description with boilerplate]]>
  </description>
  <link>link to item page</link>
  <g:condition>new</g:condition>
  <g:price>19.99</g:price>
  <g:product_type>Clothing, Accessories</g:product_type>
  <g:image_link>linktoimage.jpg</g:image_link>
  <g:payment_accepted>Visa</g:payment_accepted>
  <g:payment_accepted>Mastercard</g:payment_accepted>
  <g:payment_accepted>Discover</g:payment_accepted>
</item>

所有这些标签在XML文件中不一定是相同的名称,所以在查看我将放在哪里的值之后,我将如何对应这两个? XML文件大约是6MB,我怀疑是否可以用2GB处理它。我应该先尝试修剪文件吗? 我从之前上传的网站获得了字段,但很多链接都不正确,因此重做,它是在RSS 2.0中,所以我想我应该坚持下去。

编辑: 以下是XML文件中单个产品的摘录:

<Product Id="21082">      
  <Code>21082</Code>
  <Description>Cute Spaghetti Strap Top</Description>       
  <Url>http://www.clot333333nd.com/21082.html</Url>      
  <Thumb>&lt;img border=0 width=53 height=70 src=http://ep.yimg33333333333333333-27706119506618_2144_317650845&gt;</Thumb>
  <Picture>&lt;img border=0 width=1125 height=1500 src=http://ep.yim333333333333333306119506618_2144_207331152&gt;</Picture>
  <Weight>1</Weight>
  <Orderable>YES</Orderable>
  <Taxable>YES</Taxable>
  <Pricing>
    <BasePrice>9.99</BasePrice>
    <LocalizedBasePrice>9.99</LocalizedBasePrice>
    <OrigPrice>24.99</OrigPrice>
    <LocalizedOrigPrice>24.99</LocalizedOrigPrice>
    <SalePrice>9.99</SalePrice>
    <LocalizedSalePrice>9.99</LocalizedSalePrice>
  </Pricing>
  <Path>
    <ProductRef Id="contactus" Url="http://www.clo3333333333333ctus.html">Contact Us</ProductRef>
    <ProductRef Id="tops" Url="http://www.clot333333333333ps.html">Wholesale Clothing Tops</ProductRef>
  </Path>
  <Availability>Usually ships the next business day.</Availability>
  <Caption>th bgc&lnt&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;</Caption>
  <OptionLists>
    <OptionList name="Size">
      <OptionValue>S</OptionValue>
      <OptionValue>M</OptionValue>
      <OptionValue>L</OptionValue>
      <OptionValue>Mixed-Sizes</OptionValue>
    </OptionList>
    <OptionList name="Color">
      <OptionValue>Blue</OptionValue>
    </OptionList>
    <OptionList name="Quantities">
      <OptionValue>1 Piece</OptionValue>
      <OptionValue>Add(+$30.89) For 12 Pieces</OptionValue>
      <OptionValue>Add(+54.77) For 24 Pieces</OptionValue>
    </OptionList>
  </OptionLists>
</Product>

我想让它看起来像这样:

<item>  
  <title>  
    <![CDATA[titlegoeshere]]>    
  </title>  
  <description>  
    <![CDATA[general description with boilerplate]]>  
  </description>
  <link>link to item page</link>
  <g:condition>new</g:condition>
  <g:price>19.99</g:price>
  <g:product_type>Clothing, Accessories</g:product_type>
  <g:image_link>linktoimage.jpg</g:image_link>
  <g:payment_accepted>Visa</g:payment_accepted>
  <g:payment_accepted>Mastercard</g:payment_accepted>
  <g:payment_accepted>Discover</g:payment_accepted>
</item>

以下是我希望它匹配的方式:

<item>
  <title>
    <![CDATA[titlegoeshere]]>  ##Description
  </title>
  <description>
    <![CDATA[general description with boilerplate]]> ##Caption
  </description>
  <link>link to item page</link> ##Url
  <g:condition>new</g:condition> ##always new
  <g:price>19.99</g:price>  ## BasePrice
  <g:product_type>Clothing, Accessories</g:product_type>   ##always same
  <g:image_link>linktoimage.jpg</g:image_link>  ## Picture
  <g:payment_accepted>Visa</g:payment_accepted>  ##always same
  <g:payment_accepted>Mastercard</g:payment_accepted>  ## always same
  <g:payment_accepted>Discover</g:payment_accepted>  #always same
</item>

这是我到目前为止所构建的内容,但是当我尝试使用它时出现了一些错误:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xmlns:g="http://base.google.com/ns/1.0" version="1.0">
  <xsl:output method="RSS 2.0" />
  <xsl:template match="Description">
    <title>
    </title>
  </xsl:template>
  <xsl:template match="Caption">
    <description>
    </description>
  </xsl:template>
  <xsl:template match="Url>
    <link>
    </link>
  </xsl:template>
  <xsl:template match="Condition">
    <g:condition>
    </g:condition>
  </xsl:template>
  <xsl:template match="Picture">
    <g:image_link>
    </g:image_link>
  </xsl:template>
</xsl:stylesheet>

另外,我是否可以使用foreach为每个元素提供保持不变的标记,例如条件,接受付款,即使它们在原始文件中没有相应的值?

1 个答案:

答案 0 :(得分:0)

  

它看起来像是最终项目的空模板吗?

对不起,你能澄清一下吗?如果您正在谈论您的示例,那么结果xml可能如下所示。这取决于您的XSLT样式表。

  

我是否需要在XML文件上运行一个小脚本来填充最终产品?

您需要将XSLT转换应用于源XML文档才能获得结果。

  

最简单的脚本编写方法是什么?我能用bash做吗?

您可以安装任何可用的XSLT处理器,创建一个bash脚本,将XML提供给XSLT样式表并生成结果并使用cron或手动等运行脚本。

  

我看到了在Dreamweaver中附加XSLT样式表的能力;有谁知道这个?

这是为了简化XSLT样式表的开发。

  

所有这些标签在XML文件中不一定是相同的名称,所以在查看我将放在哪里的值之后,我将如何对应这两个?

您必须编写将输入节点转换为输出的xslt模板。 F.i。

<xsl:template match="input">
  <output/>
</xsl:template>

互联网上有很多关于XSLT的教程。

  

XML文件大约是6MB,我怀疑能够用2GB处理它,我应该先尝试修剪文件吗?

XSLT处理器可以处理大量的文件