2015-11-26 3 views
0

Как я могу получить значения CfgGroup/DBID, если мой агент значения агентаDBIDs/DBID = 103?Как фильтровать данные Xml в XmlDocument

<?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()); 
} 

* Примечание: нс = пространство имен, nsMgr = XmlNamespaceManager

Update:

Используйте тот же XML, как указано выше, есть какие-то способы для поиска значения конкретного агентаDBID/DBID и возврата его значения CfgGroup/DBID? Как насчет использования предложения where?

Update2: Исходя из вышеизложенного XML, как я могу получить часть данных XML ниже, если мой поиск значение = 994 (со ссылкой на agentDBIDs/значение DBID)?

<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: '/ нс: ConfData/нс: CfgAgentGroup/нс: CfgGroup/нс: DBID' – har07

+0

Привет @ har07, нет значения – YWah

+0

я не см. любое пространство имен в вашем XML. Вам не нужен префикс 'ns' и' XmlNamespaceManager'. –

ответ

0

Это даст вам значения CfgGroup/DBID. Используйте пространство имен «System.Xml». В этом случае я напечатал значение CfgGroup/DBID, если оно равно 103 (значение агентаDBIDs/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 не содержится DBID со значением = "103". Вы можете проверить его с другими значениями. Для проверки измените код, чтобы проверить значение = «109», которое присутствует в вашем XML. –

+0

Я думаю, вы неправильно поняли мой вопрос. Моя проблема теперь в том, как я могу получить значение CfgGroup/DBID, если значение моего фильтра - это значение agentDBIDs/DBID = 103. – YWah

Смежные вопросы