SSIS - XML 验证错误 - "Expected schema root"

SSIS - XML Validation Error - "Expected schema root"

我在 SSIS 包中有一个 XML 任务,当 运行:

时出现以下错误
Error: 0xC002F304 at XML Task, XML Task: An error occurred with the following error
  message: "Expected schema root. Make sure the root element is <schema> and the 
  namespace is 'http://www.w3.org/2001/XMLSchema' for an XSD schema or 
  'urn:schemas-microsoft-com:xml-data' for an XDR schema.".

这是 XML 文档的示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Item xmlns="http://path.to.namespace.com">
    <Name>Notebook</Name>
    <Price>4.95</Price>
</Item>

XSD 文档看起来像这样(重新格式化以更好地适应此处 - 在实际 XSD 中,模式标记全是一行):

<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
               targetNamespace="http://path.to.namespace.com" 
               xmlns="http://path.to.namespace.com" 
               elementFormDefault="qualified">

<!-- id_ps -->
<xs:element name="Item">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Price" type="xs:decimal"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

我已经 运行 XSD/XML 组合通过几个在线验证器,看起来还不错。我什至删除了所有文件连接并为任务中的 XML 和 XSD 完成了直接输入以排除任何文件权限 - 完全相同的错误。

这是我的XML任务配置:

Input
  Operation Type:         Validate
  Source Type:            Direct Input
  Source:                 (see above XML)

Output
  SaveOperationResult:    False

Second Operand
  SecondOperandType:      Direct Input
  SecondOperand:          (see above XSD)

Validation options
  ValidationType:         XSD
  FailOnValidationFail:   False

我对 XML/XSD 没有太多经验,XSD 是由第三方供应商生成的。

这里有什么我完全想念的吗?

我找到了一种使用 VB 而不是在 ScriptTask 中执行此操作的方法。它执行以下操作:

  1. 将 XML 作为来自 SSIS 包的字符串变量。
  2. 去掉一些 ExecuteSQLTask 添加的标签。
  3. 将字符串读入XML文档。
  4. 将架构从文件路径添加到 XML文档。
  5. 验证 XML。
  6. 使用 StreamWriter 写出 XML。

查看:

Dim XMLstring As String = Dts.Variables("User::XMLvariable").Value.ToString()
Dim XMLdoc As XmlDocument = New XmlDocument()

'Remove ROOT tags that show up.
XMLstring = XMLstring.Replace("<ROOT>", "")
XMLstring = XMLstring.Replace("</ROOT>", "")

XMLdoc.LoadXml(XMLstring)

XMLdoc.Schemas.Add(Nothing, "XSDFile.xsd")

Try
    XMLdoc.Validate(Nothing)
Catch ex As XmlException
    Dts.Events.FireError(0, "XML Error", "Error:" + ex.Message, String.Empty, 0)
    Dts.TaskResult = ScriptResults.Failure
    Exit Sub
Catch ex As Exception
    Dts.Events.FireError(0, "Error", "Error:" + ex.Message, String.Empty, 0)
    Dts.TaskResult = ScriptResults.Failure
    Exit Sub
End Try

Dim sw As New IO.StreamWriter("ExportFile.xml")
XMLdoc.Save(sw)
sw.Dispose()
Dts.TaskResult = ScriptResult.Success

我相信应该有更多的错误检查和一切,这只是它的一个简单形式。完全接受建议和调整。

从这里获得帮助和示例:

http://www.vbforums.com/showthread.php?528172-VB-NET-code-to-validate-xml-against-xsd-file http://www.codeproject.com/Articles/10444/Simple-code-to-validate-an-XML-file-against-a-sche