SSRS Экспорт отчета в XML и удаление элемента <Report>
Я пытаюсь настроить отчет в 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 предотвратить отображение элемента отчета?
Спасибо, Гревилл
1 ответ
Подумайте об использовании XSLT, декларативного языка шаблонов, используемого для преобразования содержимого XML любым способом, формой или формой!
Конечно, вам понадобится процессор XSLT, который считывает исходный файл.xml, преобразует его в приведенный ниже файл.xsl и выводит окончательный файл.xml. Практически все современные языки программирования поддерживают библиотеки XSLT (Java, C#, Python, PHP, даже VBA, поскольку вы можете запускать преобразования xsl с помощью своего повседневного MS Access или MS Excel):
<?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&rs%3AFormat=XML&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>
Кстати, ваш оригинальный XML schemaLocation
путь нужен амперсанду характер &
сбежал как &