2015-11-26 72 views
0

如果我的過濾器值agentDBIDs/DBID值= 103,如何獲取CfgGroup/DBID值?如何過濾XmlDocument中的Xml數據

<?xml version="1.0" encoding="Windows-1252"?> 
<ConfData> 
    <CfgAgentGroup> 
    <CfgGroup> 
     <DBID value="109" /> 
     <tenantDBID value="1" /> 
     <name value="group1" /> 
     <contractDBID value="0" /> 
    </CfgGroup> 
    <agentDBIDs> 
     <DBID value="103" /> 
     <DBID value="994" /> 
    </agentDBIDs> 
    </CfgAgentGroup> 
    <CfgAgentGroup> 
    <CfgGroup> 
     <DBID value="110" /> 
     <tenantDBID value="1" /> 
     <name value="group2" />  
     <contractDBID value="0" /> 
    </CfgGroup> 
    <agentDBIDs> 
     <DBID value="102" /> 
     <DBID value="103" /> 
     <DBID value="1009" /> 
     <DBID value="1010" /> 
     <DBID value="1011" /> 
     <DBID value="1012" /> 
     <DBID value="1013" /> 
     <DBID value="1014" /> 
     <DBID value="1015" /> 
     <DBID value="1016" /> 
     <DBID value="1017" /> 
     <DBID value="1018" /> 
     <DBID value="1019" /> 
     <DBID value="1020" /> 
    </agentDBIDs> 
    </CfgAgentGroup> 
</ConfData> 

我可以過濾agentDBIDs/DBID價值,但我不知道如何得到它的CfgGroup/DBID值。這是我迄今所做的:

XmlNodeList nodeList = AllAgentGroupXML.SelectNodes("/ns:ConfData/ns:CfgAgentGroup/ns:agentDBIDs/ns:DBID", nsMgr); 

foreach (XmlNode abc in nodeList) 
{ 
    if (abc.Attributes["value"].Value.ToString() == "103") 
    Console.WriteLine(abc.Attributes["value"].Value.ToString()); 
} 

*注:NS =命名空間,nsMgr =的XmlNamespaceManager

更新:

使用相同的XML如上,是有什麼方法搜索特定的agentDBID/DBID值並返回其CfgGroup/DBID值?如何使用where子句?

UPDATE2: 基於上面的XML,我怎麼能得到下面,如果我的搜索值= 994(指agentDBIDs/DBID值)的XML數據的一部分?

<CfgAgentGroup> 
    <CfgGroup> 
     <DBID value="109" /> 
     <tenantDBID value="1" /> 
     <name value="group1" /> 
     <contractDBID value="0" /> 
    </CfgGroup> 
     <agentDBIDs> 
     <DBID value="103" /> 
     <DBID value="994" /> 
     </agentDBIDs> 
</CfgAgentGroup> 

任何想法?

+0

,如果你用同樣的方法,只是不同的XPath什麼問題:'/ NS:ConfData/NS:CfgAgentGroup/NS:CfgGroup/NS:DBID' – har07

+0

嗨@ har07,沒有價值 – YWah

+0

我不請參閱XML中的任何名稱空間。你不需要'ns'前綴和'XmlNamespaceManager'。 –

回答

0

這將爲您提供CfgGroup/DBID值。使用命名空間「System.Xml」。在這種情況下,如果它是103(agentDBIDs/DBID值),我已打印CfgGroup/DBID值。

 string lstr = System.IO.File.ReadAllText(PathOfXML); 
     XmlDocument doc = new XmlDocument(); 

     doc.LoadXml(lstr); 


      XmlNodeList CFG_Group_DB_nodeList = doc.SelectNodes(@"/ConfData/CfgAgentGroup/CfgGroup/DBID"); 

      foreach (XmlNode n1 in CFG_Group_DB_nodeList) 
      { 

       if (n1.Attributes["value"].Value == "103") 
       { 
        Console.WriteLine(n1.Attributes["value"].Value); 
       } 


      } 
+0

嗨@AkshayDubey,感謝您的解決方案,但沒有結果打印出 – YWah

+0

@YWah這是因爲,在您的XML文件中不包含值爲「103」的DBID。你可以用其他值來檢查它。對於檢查,更改代碼以檢查XML中存在的值=「109」。 –

+0

我想你誤解了我的問題。我現在的問題是如果我的過濾器值是agentDBIDs/DBID值= 103,我如何獲得CfgGroup/DBID值。 – YWah