2017-04-15 48 views
1

我试图从dtsx中的可执行对象中提取特定值。试图从dtsx xml文件中检索信息

我想要诸如SQLStatementSource,ObjectNameConnection之类的东西。我似乎无法做到。我正在使用XMLDocumentGetElementsByTagName。这是我的整个代码,用DTS:ObjectData,我可以得到回报。如果我在其中使用了SQLStatementSource,我没有任何结果。

using System; 
using System.Xml; 
public class XMLApp 
{ 
    public void DisplayResults(String strSQLSrc)// String strConn, String strObjNm, 
    { 
     // Do something with strFirst and strLast. 
     // ... 
     Console.WriteLine("{0}", strSQLSrc); //strConn, strObjNm, 
    } 
    public void ProcessXML(String xmlText) 
    { 
     XmlDocument _doc = new XmlDocument(); 

     _doc.Load(xmlText);// to read from a file. 
     XmlNodeList _SQLSrc = _doc.GetElementsByTagName("DTS:ObjectData"); 

     for (int _i = 0; _i < _SQLSrc.Count; ++_i) 
     { 
      DisplayResults(_SQLSrc[_i].InnerText); 

     } 
    } 
public static void Main(String[] args) 
    { 
     XMLApp _app = new XMLApp(); 

     _app.ProcessXML("C:\\users\\dsnos\\onedrive\\documents\\LoadingProviderContracts_new.dtsx"); 
    } 
}// end XMLApp 

这是dtsx文件的一部分,但不是顶层。

<DTS:Executables> 
    <DTS:Executable 
     DTS:refId="Package\fill mi with empty string where null" 
     DTS:CreationName="Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask, Microsoft.SqlServer.SQLTask, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
     DTS:Description="Execute SQL Task" 
     DTS:DTSID="{E4CA09C6-DA3D-4297-BC7F-1F2EEA35036F}" 
     DTS:ExecutableType="Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ExecuteSQLTask, Microsoft.SqlServer.SQLTask, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
     DTS:LocaleID="-1" 
     DTS:ObjectName="fill mi with empty string where null" 
     DTS:TaskContact="Execute SQL Task; Microsoft Corporation; SQL Server 2012; © 2007 Microsoft Corporation; All Rights Reserved;http://www.microsoft.com/sql/support/default.asp;1" 
     DTS:ThreadHint="0"> 
     <DTS:Variables /> 
     <DTS:ObjectData> 
     <SQLTask:SqlTaskData 
      SQLTask:Connection="{30817305-3556-4AF7-BB5E-0E9BA18B6538}" 
      SQLTask:SqlStatementSource="update wprovidercontractstemp set middlename = '' where middlename is null" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" /> 
     </DTS:ObjectData> 
    </DTS:Executable> 
</DTS:Executables> 

我可以得到ObjectData,但它只是一串连接在一起的值。

任何指针?我试图阅读关于XmlDocument的文档,这对我来说是愚蠢的。

回答

0

有很多不清楚的地方:

  • 您设置的标签sql-server,但是这似乎并没有在所有参与?
  • 你的XML是 - 这里发布 - 无效

这句话

这里是DTSX文件的部分,但不是顶级水平。

显示很清楚,你应该阅读有关XML namespaces ...

如果我在它使用任何与SQLStatementSource,我没有得到任何结果

在您的例子这部分这里

<SQLTask:SqlTaskData 
     SQLTask:Connection="{30817305-3556-4AF7-BB5E-0E9BA18B6538}" 
     SQLTask:SqlStatementSource="update wprovidercontractstemp set middlename = '' where middlename is null" xmlns:SQLTask="www.microsoft.com/sqlserver/dts/tasks/sqltask" /> 
</DTS:ObjectData> 

一方面,XQuery严格区分大小写(SQLStatementSource != SqlStatementSource!),另一方面,该属性是SQLTask:SqlTaskData的一部分,它与DTS:ObjectData生活在不同的命名空间中。顺便说一句:这是SqlStatementSource一个属性,而不是一个元素...

作为快速射击,你可以尝试,带有命名空间通配符查询。把*:放在任何名字的前面:而不是DTS:ObjectData使用*:ObjectData

如果这不能解决您的问题,请发送一个有效但重做的示例(必须与XmlDocument.Load(string filename)一起使用)。