我有一个构建 XML 格式数据的 SQL 语句(SQL server 2014)。我将其拉入 SSIS (2013) 对象变量。如果我将 SQL 放入数据流任务中以进入文本文件,它就可以工作。但是,没有编码头。由于返回数据的大小,转换为 NVARCHAR 不是一种选择 - 数据会被截断。
所以,我有一个 sql 任务,相同的查询:ResultSet = XML; 变量数据类型 = 对象(如果我尝试字符串,它会失败)
所以,在这里待了很长时间后——我发现了各种可以使用 XmlWriter 和 XmlWriterSettings 的好东西。厉害,厉害 但是——我似乎无法让脚本任务(C#)正确读取(或格式化/定义)XML 对象。我不断收到“DTS 脚本任务在用户代码中遇到异常”
我在 LoadXML 语句处设置了一个断点 - 验证了该变量确实具有 XML 数据 - 有趣的是,它被...包围了。在调试模式下,具体错误是“根级别的数据无效。第 1 行,位置 1。”
它在 LoadXML 语句中引发异常——我错过了什么?我需要定义 XML 布局(字段)吗?注释掉的测试字符串没有问题。没有失败。头写。
有任何想法吗?
更新:它也因我的测试数据的字符串版本而失败,没有根标签。
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForWrite("User::PCC_XML");
Dts.VariableDispenser.GetVariables(ref varCollection);
XmlDocument xdoc = new XmlDocument();
XmlWriterSettings settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
ConformanceLevel = ConformanceLevel.Document,
OmitXmlDeclaration = false,
CloseOutput = true,
Indent = true,
IndentChars = " ",
NewLineHandling = NewLineHandling.Replace
};
xdoc.LoadXml(varCollection["User::PCC_XML"].Value.ToString());
//xdoc.LoadXml("<xml><foo></foo></xml>");
using ( StreamWriter sw = File.CreateText("C:\\test_xml.xml") )
using ( XmlWriter writer = XmlWriter.Create(sw, settings))
{
xdoc.WriteContentTo(writer);
writer.Close();
}
Dts.TaskResult = (int)ScriptResults.Success;
}
我的 XML 的精简版是(包括添加的根)
<ROOT>
<Universal_letters>
<Universal_letter>
<docID>123456</docID>
<Letter_Code>123</Letter_Code>
<Callback_Phone>1-888-111-111</Callback_Phone>
<Delivery_Methods>
<Delivery_Method />
<Print_Queue />
</Delivery_Methods>
<Requested_Date>2016-07-28</Requested_Date>
<Consumer_First_Name>Bubba</Consumer_First_Name>
<Consumer_Last_Name>Bubbster</Consumer_Last_Name>
<Consumer_Address_1>123 Street Way</Consumer_Address_1>
</Universal_letter>
</Universal_letters>
</ROOT>