Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SSI将XML转换为XSD_Sql Server_Xml_Ssis_Xsd - Fatal编程技术网

Sql server 使用SSI将XML转换为XSD

Sql server 使用SSI将XML转换为XSD,sql-server,xml,ssis,xsd,Sql Server,Xml,Ssis,Xsd,我正在尝试使用SSI将下面的XML加载到SQL Server表中。 原始XML: <RESULTS> <SEARCHRESULT RECORDS="3014"> <ROW ROWNUM="1" PKField="EntityCounter"> <COLUMN COLNUM="1" NAME="EntityCounter" DATATYPE="number">1234</COLUMN>

我正在尝试使用SSI将下面的XML加载到SQL Server表中。 原始XML:

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

1234
5678
XYZ
LMN
目标表有4列:EntityCounter、ReferenceID、Name和EntityType。 当我为这样的文件创建XSD时,我没有得到预期的输出。
XML source在输出端生成四列:ROW_ID、RWONUM、PKField和SEARCHRESULT_ID

当我修改XML时,我能够加载数据,如下所示: 修改的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>

1234
5678
XYZ
LMN
当我为上述文件创建并使用XSD时,XML源在输出处生成七列:ROWNUM、pkfield、EntityCounter、ReferenceID、Name、EntityType和SEARCHRESULT_Id


是否可以使用原始XML生成类似的输出?

感谢@MarkWojciechowicz建议使用XSLT。。! 我能够使用以下xslt代码将原始xml转换为所需格式:

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


可以使用SSI加载修改后的XML。

两种可能的选择是在处理之前使用xslt修改XML,或者在数据流中使用枢轴转换将行放到列上。我对xsd不太熟悉,不知道那里是否有可以实现的魔法。谢谢你的支持。