2012-08-28 112 views
0

我想使用xslt从给定的xml文件中删除元数据和模式信息,以便我可以在sql表中导入这些数据,但我无法从xml文件中删除它的元数据和模式信息。 我过去三天确实做了很多Google,但我无法执行它。请为我提供一个有效的xslt文件代码,用于从给定的xml文件中删除元数据和模式。使用xslt文件转换xml数据

在这里,我为您提供了xml文件的代码。

<?xml version="1.0" encoding="utf-16"?> 
<DataSet> 
    <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="Table"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="lukas_id_nagrody" type="xs:string" minOccurs="0" /> 
       <xs:element name="ilosc" type="xs:int" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <NewDataSet> 
     <Table diffgr:id="Table1" msdata:rowOrder="0"> 
     <lukas_id_nagrody>10</lukas_id_nagrody> 
     <ilosc>4</ilosc> 
     </Table> 
     <Table diffgr:id="Table2" msdata:rowOrder="1"> 
     <lukas_id_nagrody>12</lukas_id_nagrody> 
     <ilosc>10</ilosc> 
     </Table> 
     <Table diffgr:id="Table3" msdata:rowOrder="2"> 
     <lukas_id_nagrody>21</lukas_id_nagrody> 
     <ilosc>32</ilosc> 
     </Table> 
     <Table diffgr:id="Table4" msdata:rowOrder="3"> 
     <lukas_id_nagrody>32</lukas_id_nagrody> 
     <ilosc>13</ilosc> 
     </Table> 
     <Table diffgr:id="Table5" msdata:rowOrder="4"> 
     <lukas_id_nagrody>33</lukas_id_nagrody> 
     <ilosc>15</ilosc> 
     </Table> 
     <Table diffgr:id="Table6" msdata:rowOrder="5"> 
     <lukas_id_nagrody>34</lukas_id_nagrody> 
     <ilosc>2</ilosc> 
     </Table> 
    </NewDataSet> 
    </diffgr:diffgram> 
</DataSet> 

我在SSIS中使用xml任务。

转换上面的XML数据后,我想要下面的输出。

<NewDataSet> 
    <Table> 
      <lukas_id_nagrody>34</lukas_id_nagrody> 
      <ilosc>2</ilosc> 
    </Table> 
</NewDataSet> 

我想输出这样的东西。 谢谢。

+0

你不提,你的XML部分被认为是元数据。 – Utkanos

+0

我编辑了我的问题并更新了我想要的示例xml输出。 – Awadhendra

回答

1

您需要一个简化的身份/复制模式,从NewDataSet开始并省略属性。试试这个:

<xsl:template match="DataSet/diffgr:diffgram/NewDataSet|DataSet/diffgr:diffgram/NewDataSet//*|text()"> 
    <xsl:copy> 
     <xsl:apply-templates select='*|text()' /> 
    </xsl:copy> 
</xsl:template> 

Runnable demo(见输出

+0

该选项正在工作,但不会复制标签内的数据。 – Awadhendra

+0

对不起 - 对我来说很傻。固定。 – Utkanos

+0

谢谢,最后由于你的帮助,我的SSIS处于工作模式。 – Awadhendra