我在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是由第三方供应商生成的。
有什么我在这里完全不见了吗?
答案 0 :(得分:0)
我找到了一种方法,用VB代替ScriptTask。它执行以下操作:
检查出来:
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