0

我正在尝试在 SSRS 中设置一个带有订阅的报告,以将一些数据导出为 XML 文件,以便可以将其导入另一个应用程序。然而,报告元素正在导致整个事情崩溃。

我的输出是:

<?xml version="1.0" encoding="utf-8" ?> 
<Report xsi:schemaLocation="BO http://reportserver?%2FBO.BILLING%20BacklogTest&rs%3AFormat=XML&rc%3ASchema=True" Name="BO" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="BO">
    <ForecastGroups>
        <ForecastGroup>
        <Code>BO.BILLING</Code> 
            <ActualOutstandingTasks>
            <TimeStamp>2015-09-25T00:00:00</TimeStamp> 
                <ArrivalPeriods>
                    <ArrivalPeriod>
                    <StopTime>2015-09-25T00:00:00</StopTime> 
                    <StartTime>2015-09-24T00:00:00</StartTime> 
                    <Tasks>2074</Tasks> 
                    </ArrivalPeriod>
                </ArrivalPeriods>
            </ActualOutstandingTasks>
        </ForecastGroup>
    </ForecastGroups>
  </Report>

除非我手动删除报告元素,否则它不起作用。我需要输出为:

<?xml version="1.0" encoding="utf-8"?>
<ForecastGroups>
    <ForecastGroup>
        <Code>BO.BILLING</Code>
        <ActualOutstandingTasks>
            <TimeStamp>2015-09-25T00:00:00</TimeStamp>
            <ArrivalPeriods>
                <ArrivalPeriod>
                    <StopTime>2015-09-25T00:00:00</StopTime>
                    <StartTime>2015-09-24T00:00:00</StartTime>
                    <Tasks>2074</Tasks>
                </ArrivalPeriod>
            </ArrivalPeriods>
        </ActualOutstandingTasks>
    </ForecastGroup>
</ForecastGroups>

然后它工作正常。SSRS 中有没有办法阻止报表元素呈现?

谢谢,格雷维尔

4

1 回答 1

0

考虑使用XSLT,一种用于以任何方式、形状或形式转换 XML 内容的声明性模板语言!

当然,您将需要一个 XSLT 处理器来读取原始 .xml 文件,使用下面的 .xsl 文件进行转换,并输出最终的 .xml 文件。几乎所有现代编程语言都维护 XSLT 库(Java、C#、Python、PHP,甚至 VBA,因为您可以使用日常的 MS Access 或 MS Excel运行xsl 转换):

<?xml version='1.0' encoding='UTF-8'?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xsi:schemaLocation="BO http://reportserver?%2FBO.BILLING%20BacklogTest&amp;rs%3AFormat=XML&amp;rc%3ASchema=True"
       Name="BO" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bo="BO"> 
<xsl:output version="1.0" encoding="UTF-8"/>

<xsl:template match="bo:Report">
    <xsl:copy-of select="bo:ForecastGroups"/>
</xsl:template>

</xsl:transform>

输出:

<?xml version='1.0' encoding='UTF-8'?>
<ForecastGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="BO">
        <ForecastGroup>
        <Code>BO.BILLING</Code> 
            <ActualOutstandingTasks>
            <TimeStamp>2015-09-25T00:00:00</TimeStamp> 
                <ArrivalPeriods>
                    <ArrivalPeriod>
                    <StopTime>2015-09-25T00:00:00</StopTime> 
                    <StartTime>2015-09-24T00:00:00</StartTime> 
                    <Tasks>2074</Tasks> 
                    </ArrivalPeriod>
                </ArrivalPeriods>
            </ActualOutstandingTasks>
        </ForecastGroup>
    </ForecastGroups>

顺便说一句,您的原始 XMLschemaLocation路径需要将 & 字符&转义为&amp;

于 2015-09-25T01:21:53.860 回答