2013-10-25 94 views
0

我想在下面的格式來創建數據飼料中使用XSLT reformating,SSRS XML導出

<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> 

,但報表服務導出選項已產生以下XML數據文件不上谷歌商家中心工作。

<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> 

如果任何機構告訴我將XML數據重新格式化爲另一個xml文件需要哪種類型的XSLT會非常有幫助。

編輯:

步驟中使用以下代碼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>  

如果我連着上面提到的XSLT通過DataTransform屬性的報告,我正在獲得輸出。

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 
--------------------------------------^ 

預先感謝您 Sudhakar

+0

當你說「哪種類型的XSLT」是否指「哪個版本」?對於您的任務,XSLT 1.0應該可以正常工作,因爲您只需要禁用一些標記並重命名其他標記。請首先諮詢XSLT的一般指南(例如,從https://en.wikipedia.org/wiki/XSLT開始)。如果您遇到了具體的XSLT問題,您可以將其添加到上面的問題中,您將得到幫助。 –

+0

實際上我需要xslt代碼來抑制標記 Details_Collection>並將標記

重命名爲。如果您能爲我提供xslt代碼,我將不勝感激。謝謝! – user2538900

+0

然後我會做你的工作。 :-) –

回答

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轉換爲另一個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"