2014-09-16 3 views
1

Я пытаюсь загрузить ниже XML в таблицу SQL Server с помощью SSIS. Оригинальный XML:XML-XSD с использованием SSIS

<RESULTS> 
    <SEARCHRESULT RECORDS="3014"> 
     <ROW ROWNUM="1" PKField="EntityCounter"> 
      <COLUMN COLNUM="1" NAME="EntityCounter" DATATYPE="number">1234</COLUMN> 
      <COLUMN COLNUM="2" NAME="Reference ID" DATATYPE="string">5678</COLUMN> 
      <COLUMN COLNUM="3" NAME="Name" DATATYPE="string">XYZ</COLUMN> 
      <COLUMN COLNUM="4" NAME="Entity Type" DATATYPE="string">LMN</COLUMN> 
     </ROW> 
    </SEARCHRESULT> 
</RESULTS> 

В таблице назначения имеет 4 колонки: EntityCounter, идентификаторСсылки, имя и EntityType. Когда я создаю XSD для такого файла, я не получаю ожидаемый результат.
Источник XML генерирует четыре столбца на выходе: ROW_ID, RWONUM, PKField и SEARCHRESULT_Id.

я смог загрузить данные, когда я изменил XML, как показано ниже: Modified XML:

<RESULTS> 
    <SEARCHRESULT RECORDS="3014"> 
     <ROW ROWNUM="1" PKField="EntityCounter"> 
      <EntityCounter>1234</EntityCounter> 
      <ReferenceID>5678</ReferenceID> 
      <Name>XYZ</Name> 
      <EntityType>LMN</EntityType> 
     </ROW> 
    </SEARCHRESULT> 
</RESULTS> 

Когда я создаю и использовать XSD для указанного выше файла, исходный XML генерирует семь столбцов на выходе: ROWNUM , PKFiled, EntityCounter, ReferenceID, Name, EntityType и SEARCHRESULT_Id.

Возможно ли сгенерировать подобный вывод с использованием оригинального XML?

+0

Возможны два варианта использования xslt для изменения xml перед обработкой или использования сводного преобразования в потоке данных для размещения строк в столбцах. Я не знаком с xsd достаточно, чтобы узнать, есть ли какая-то магия, которую можно сделать там. –

+0

Благодарим вас за ввод Mark. – Swapnil

ответ

0

Спасибо @MarkWojciechowicz за предложение использовать XSLT ..! я был в состоянии преобразовать оригинальный XML в необходимый формат, используя ниже код XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="COLUMN[@NAME]"> 
     <xsl:element name="{concat('Col_',translate(@NAME,' ',''))}"> 
      <xsl:value-of select="."/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

Модифицированный XML можно загрузить с помощью SSIS.