0

我正在尝试以以下格式创建数据馈送,

    <rss version="2.0">
    <channel>
    <Title>FeedTitle</Title>
    <link>http://www.mydomain.com</link>
    <description>My Products</description>
    <item>
        <Id>10890</Id>
        <Title>Benetton 01</Title>
    </item>
    <item>
        <Id>10700</Id>
        <Title>Benetton 02</Title>
    </item>
    </channel>
    </rss>

但是,Reporting Services 导出选项生成了以下 xml 数据馈送,这在 Google Merchant Center 上不起作用。

    <Report xsi:schemaLocation="pg_google_data_feed http://reportserver?%2Fpg_google_data_feed&rs%3AFormat=XML&rc%3ASchema=True" Name="pg_google_data_feed">
    <Title>FeedTitle</Title>
    <link>http://www.mydomain.com</link>
    <description>My Products</description>
    <ProductList>
        <Details_Collection>
            <Details>
                <Id>10890</Id>
                <Title>Benetton 01</Title>
            </Details>
            <Details>
                <Id>10700</Id>
                <Title>Benetton 02</Title>
            </Details>
                   </Details_Collection>
    </ProductList>
    </Report>

如果有人告诉我需要哪种类型的 XSLT 将 XML 数据重新格式化为另一个 xml 文件,那将非常有帮助。

编辑 :

步骤 1. 使用以下代码创建 xslt 文件。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:template match="Details">
        <Details>
            <xsl:for-each select="@*">
                <xsl:element name="{name(.)}">
                    <xsl:value-of select="." />
                </xsl:element>
            </xsl:for-each>
        </Details>
    </xsl:template>
</xsl:stylesheet>

第 2 步:将报告的属性设置为“datafeed.xslt”

没有将 xslt 应用到我的 ssrs 报告结果看起来像这样,

    <Report xsi:schemaLocation="pg_google_data_feed http://reportserver?%2Fpg_google_data_feed&rs%3AFormat=XML&rc%3ASchema=True" Name="pg_google_data_feed">
        <Title>FeedTitle</Title>
        <link>http://www.mydomain.com</link>
        <description>My Products</description>
        <ProductList>
            <Details_Collection>
                <Details>
                    <Id>1000</Id>
                </Details>
                <Details>
                     <Id>1000</Id>
                 </Details>
             </Details_Collection> 
        </ProductList>
    </Report>    

如果我通过 DataTransform 属性将上述 xslt 附加到报告中,则会得到以下输出。

XML Parsing Error: syntax error
Location: file:///C:/Documents%20and%20Settings/Administrator/Desktop/pg_google_data_feed.xml
Line Number 1, Column 39:<?xml version="1.0" encoding="utf-8"?>1089010947109191093310895108921092406598115141151311512
--------------------------------------^

提前谢谢你

4

1 回答 1

2

在您的输入周围有一个稍微更新的包装器

<?xml version="1.0" encoding="ISO-8859-1"?>
<Report 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="pg_google_data_feed http://reportserver?%2Fpg_google_data_feed&amp;rs%3AFormat=XML&amp;rc%3ASchema=True" Name="pg_google_data_feed">
  <!-- everything else stays the same here -->
</Report>

以下 XSLT 将提供所需的转换和过滤

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    exclude-result-prefixes="xsi">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />

  <!-- rule to suppress the undesired nodes -->
  <xsl:template match="Report|ProductList|Details_Collection">
    <xsl:apply-templates/>
  </xsl:template>

  <!-- rule to rename the Details node -->
  <xsl:template match="Details">
    <item>
      <xsl:apply-templates/>
    </item>
  </xsl:template>

  <!-- rule to copy everything else -->
  <!-- see http://stackoverflow.com/questions/857010/xsl-avoid-exporting-namespace-defintions-to-resulting-xml-documents-->
  <!-- see http://stackoverflow.com/questions/14166259/xslt-default-template-confusion -->
  <xsl:template match="*|@*">
    <xsl:element name="{name()}">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

  <!-- rule to start the conversion and provide the wrapper tags -->
  <xsl:template match="/">
    <rss version="2.0">
      <channel>
        <xsl:apply-templates/>
      </channel>
    </rss>
  </xsl:template>

</xsl:stylesheet>

笔记:

  • 这个 XSLT 只是将一种 XML 转换为另一种。在继续之前,您应该设置一个测试环境来检查这方面。
  • 作为第二步,您应该进行修改(如果需要)以将 XSLT 集成到您似乎拥有的自动处理设置中。我注意到字符串"pg_google_data_feed http://reportserver?%2Fpg_google_data_feed&rs%3AFormat=XML&rc%3ASchema=True"似乎无效,因为它包含未加引号的 & 符号。您可能想"pg_google_data_feed http://reportserver?%2Fpg_google_data_feed&amp;rs%3AFormat=XML&amp;rc%3ASchema=True"改用。
于 2013-10-27T11:50:29.390 回答