Во второй из двух статей ниже показано, как использовать файл XLST в SSIS для преобразования исходного файла XML в то, что вы можете использовать для своей описанной цели. Я предоставляю два
Содержимое файла XSLT внизу.
http://sqlserverpedia.com/blog/sql-server-bloggers/loading-xml-using-ssis/
http://blog.hoegaerden.be/2011/04/20/loading-complex-xml-using-ssis/
Ремонт к указанному образцу данных:
1) Удалите пробел в начале комментария: «... xmldata / 1 / xmldata.xsd ...» в «xmldata / 1 / xmldata.xsd»
2) Добавьте </data></dataset>
в самый конец данных.
Вы можете проверить это здесь (Хммммм, похоже, он там не работает!):
http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
Или добавьте это как вторую строку XML для тестирования в IE, открыв файл XML:
<?xml-stylesheet type="text/xsl" href="Cognos.xsl"?>
Внимательно просмотрите списки xslt и обратите внимание на различия в элементе 'output'. Обратите внимание, что мне нужно было определить в моем файле XSLT пространство имен, которое использовалось в элементе набора данных XML-файла, и дать ему имя, которое я могу использовать для префикса ссылок на узлы, определенные в наборе данных. Предположим, что чувствительность к регистру имеет значение везде, потому что это, вероятно, имеет значение. Прочитайте некоторые элементы XSLT по адресу:
http://www.w3schools.com/xsl/
Cognos.xsl для отображения содержимого в виде файла с разделителями «вертикальная черта». В конце будет пустой столбец - из-за конечного разделителя - который вы должны будете игнорировать в своем коде, который использует файл.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cog="http://developer.cognos.com/schemas/xmldata/1/">
<xsl:output method="text" encoding="UTF-8" indent="no"
omit-xml-declaration="yes"
/>
<xsl:template match="/">
<xsl:apply-templates select="cog:dataset/cog:metadata/cog:item">
</xsl:apply-templates>
<xsl:text> </xsl:text>
<xsl:apply-templates select="cog:dataset/cog:data/cog:row">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="cog:dataset/cog:metadata/cog:item">
<xsl:value-of select="@name"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="cog:dataset/cog:data/cog:row">
<xsl:text> </xsl:text>
<xsl:apply-templates select="./cog:value">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="cog:dataset/cog:data/cog:row/cog:value">
<xsl:value-of select="."/>
<xsl:text>|</xsl:text>
</xsl:template>
</xsl:stylesheet>
Cognos.xsl для отображения содержимого в виде таблицы HTML:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cog="http://developer.cognos.com/schemas/xmldata/1/">
<xsl:output method="html" encoding="UTF-8" indent="yes"
/>
<xsl:template match="/">
<html><body>
<table border="1"><tr>
<xsl:apply-templates select="cog:dataset/cog:metadata/cog:item">
</xsl:apply-templates>
</tr>
<xsl:text> </xsl:text>
<xsl:apply-templates select="cog:dataset/cog:data/cog:row">
</xsl:apply-templates>
</table>
</body></html>
</xsl:template>
<xsl:template match="cog:dataset/cog:metadata/cog:item">
<td>
<xsl:value-of select="@name"/>
</td>
</xsl:template>
<xsl:template match="cog:dataset/cog:data/cog:row">
<tr>
<xsl:apply-templates select="./cog:value">
</xsl:apply-templates>
</tr>
</xsl:template>
<xsl:template match="cog:dataset/cog:data/cog:row/cog:value">
<td>
<xsl:choose>
<xsl:when test=". !='' and . !=' '">
<xsl:value-of select="." />
</xsl:when>
<xsl:when test=". =' '">
<xsl:text>space</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
</xsl:stylesheet>
И, да, мы все приветствуем этот краткий сборник требований, исправлений, ссылок и методов, которые я потратил почти на 14 часов. Может быть, я превращу это в статью.