2017-04-15 61 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)一起使用)。