没有XML源识别的列的xml文件

时间:2014-07-29 16:56:24

标签: sql xml xslt ssis

我有一个包含以下内容的XML文件(某些敏感数据被'DummyData'替换)

  <Alert>
    <AlertID>23210B</AlertID>
    <Title>DummyData</Title>
    <PublishDate>3/31/2014 12:00:00 AM</PublishDate>
    <Severity>03</Severity>
    <ResponseNecessary>Yes</ResponseNecessary>
    <ThreatDate>6/2/2014 12:00:00 AM</ThreatDate>
    <DueDate>
   </DueDate>
   <SystemStandard>Yes</SystemStandard>
    <Type>DummyData</Type>
     <Overview>DummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyDataDummyData</Overview>
   <NIRTAnalysis>&lt;p&gt;N/A&lt;/p&gt;</NIRTAnalysis>
   <ThreatAsessment>&lt;p&gt;N/A&lt;/p&gt;</ThreatAsessment>
   <ProductsAffected>&lt;p&gt;DummyData 10 SP4 LTSS&lt;/p&gt;</ProductsAffected>
   <RequiredActions>DummyDataDummyDataDummyDataDummyDataDummyData</RequiredActions>
   <AdditionalInformation>DummyDataDummyDataDummyDataDummyDataDummyData</AdditionalInformation>
   <ExternalReference>DummyDataDummyDataDummyDataDummyDataDummyDataDummyData</ExternalReference>
   <PatchID>
   </PatchID>
 </Alert>

以下由SSIS生成的xsd文件:

 <?xml version="1.0"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"     xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Alert">
    <xs:complexType>
       <xs:sequence>
       <xs:element minOccurs="0" name="AlertID" type="xs:string" />
        <xs:element minOccurs="0" name="Title" type="xs:string" />
        <xs:element minOccurs="0" name="PublishDate" type="xs:string" />
        <xs:element minOccurs="0" name="Severity" type="xs:unsignedByte" />
        <xs:element minOccurs="0" name="ResponseNecessary" type="xs:string" />
        <xs:element minOccurs="0" name="ThreatDate" type="xs:string" />
        <xs:element minOccurs="0" name="DueDate" type="xs:string" />
        <xs:element minOccurs="0" name="SystemStandard" type="xs:string" />
        <xs:element minOccurs="0" name="Type" type="xs:string" />
        <xs:element minOccurs="0" name="Overview" type="xs:string" />
        <xs:element minOccurs="0" name="NIRTAnalysis" type="xs:string" />
        <xs:element minOccurs="0" name="ThreatAsessment" type="xs:string" />
        <xs:element minOccurs="0" name="ProductsAffected" type="xs:string" />
        <xs:element minOccurs="0" name="RequiredActions" type="xs:string" />
        <xs:element minOccurs="0" name="AdditionalInformation" type="xs:string" />
        <xs:element minOccurs="0" name="ExternalReference" type="xs:string" />
        <xs:element minOccurs="0" name="PatchID" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我的问题是当我使用XML Source加载文件但源无法识别列时。我猜它认为文件有嵌套节点,因为我可以看到任何列的唯一方法是使用下面的XSD,它将看到所有列,但所有列都是单独的输出:

 <?xml version="1.0"?>
 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"      xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="Alert">
     <xs:complexType>
       <xs:sequence>
         <xs:element minOccurs="0" maxOccurs="unbounded" name="AlertID" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="Title" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="PublishDate" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="Severity" type="xs:unsignedByte" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="ResponseNecessary" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="ThreatDate" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="DueDate" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="SystemStandard" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="Type" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="Overview" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="NIRTAnalysis" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="ThreatAsessment" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="ProductsAffected" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="RequiredActions" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="AdditionalInformation" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="ExternalReference" type="xs:string" />
         <xs:element minOccurs="0" maxOccurs="unbounded" name="PatchID" type="xs:string" />
       </xs:sequence>
     </xs:complexType>

我对XLST知之甚少,但我知道我可以用这种方式压扁文件,但对我来说,它是平的。对于我做错了什么有什么建议吗?我相信我只是有一个xsd问题,但你看到的是由SSIS生成的。

1 个答案:

答案 0 :(得分:0)

似乎问题与XML本身有关。 请将根元素添加到xml文件中,并在添加根后再次使用新的SSIS生成的xsd。

xml应如下所示:

<?xml version="1.0"?>
<Root>
<Alert>
....
</Alert>
</Root>