2017-02-02 138 views
1

我的XML看起來像這樣。我有一個節點狀態,這個狀態可以在隨機的父節點下多次。但我想在我的XML中搜索每個狀態並捕獲變量中的批准值。我怎樣才能做到這一點?此外,一旦我收集了所有狀態,我希望它們存儲在數據庫中。基本上,我想在我的XML中查找所有狀態並捕獲這些值。多次查找XML中的特定節點並獲取所有節點的值

  <loop1> 
       <loop2> 
        <ID>001</ID> 
        <status code="A">approve</status> 
        </loop2> 
        </loop1> 

任何幫助表示讚賞!

我試着用下面的代碼 -

XmlDocument xDoc = new XmlDocument(); 
       xDoc.LoadXml(xmlValue);--xmlValue has my XML file content 
       XmlElement xelRoot = xDoc.DocumentElement; 
       XmlNodeList xnlNodes = xelRoot.SelectNodes("/status"); 
     foreach (XmlNode xNode in xnlNodes) 
       { 
        string ostatus = xNode["status"].InnerText; 
       } 

但我得到當我嘗試閱讀的innerText錯誤對象引用未設置一個實例。

+0

你有沒有嘗試過一些東西了?你能告訴我們一些代碼嗎? – brugnner

+0

您是否想在C#應用程序中執行此操作,或者數據庫系統是否應該解決此問題(哪個RDBMS - 產品和版本)?您可能會閱讀*深度搜索'XPath' * like'// status' ... – Shnugo

+0

我嘗試使用XMLelement和XMLdocument,但是當我嘗試提取狀態時,它提供的對象引用未設置爲實例錯誤。我基本上想要捕獲所有的狀態值,然後在數據庫中檢查狀態是否被批准,然後如果狀態爲拒絕,那麼bla bla else然後bla bla – chits

回答

0

這還不是最簡潔的方法,但你接近:

我增加了一個狀態節點的XML

string YourXml = "<loop1><loop2><ID>001</ID><status code = \"A\">approve</status><status code = \"B\">deny</status></loop2></loop1>"; 

XmlDocument xDoc = new XmlDocument(); 
xDoc.LoadXml(YourXml); 
    XmlElement xelRoot = xDoc.DocumentElement; 
XmlNodeList xnlNodes = xelRoot.SelectNodes("//status"); //Deep search!! 
var sb = new StringBuilder(); 
foreach (XmlNode xNode in xnlNodes) { 
    sb.AppendLine(string.Format("code='{0}' value='{1}'", xNode.Attributes["code"].Value,xNode.InnerText)); 
} 
string result = sb.ToString(); 

結果是

code = 'A' value = 'approve' 
code = 'B' value = 'deny' 
相關問題