2017-06-01 4 views
0

私は唯一の国家がアイドルではないノードを選択したい、この文字列からのWeb要求を通じて応答を下回るC#でXMLDocumentから特定のデータを選択する方法は?

<Shofar Target_="Base" > 
    <RapidOnSite_Pump Key="1" State="Idle" Amount="20" /> 
    <RapidOnSite_Pump Key="2" State="Idle" Amount="15" /> 
    <RapidOnSite_Pump Key="3" State="Despencing" Amount="25"/> 
- <Verb_List> 
    <Verb_Item Key="1" Execute="RapidOnSite_Pump_AdHoc" Result="OK" 
     Detail="All Pumps►5" /> 
    </Verb_List> 

を得ました。

マイコード

string responseFromServer = MY_RESPONSE 
    XmlDocument mainxml = new XmlDocument(); 
    mainxml.LoadXml(responseFromServer); 

    XmlNodeList xnList = mainxml .SelectNodes("/Shofar/RapidOnSite_Pump [@State!='Idle']"); 

しかし、このコードによって私はのrequirmentsを得るdidntの。誰でも私を助けてくれますか?

+0

「XmlDocument」を使用するか、LINQ to XMLを使用できますか? –

+0

私はただ必要な応答がほしいと思う。 –

+0

ちょうどあなたのコードをチェックしました - それはうまく動作します。 1つのノードが返されます –

答えて

1

チャットでは、実際のxmlを表示します。これには、考慮する必要のある名前空間が含まれています。

mainxml.LoadXml(responseFromServer); 

XmlNamespaceManager manager = new XmlNamespaceManager(mainxml.NameTable); 
manager.AddNamespace("ns", "http://ShofarNexus.com"); 

XmlNodeList xnList = mainxml.SelectNodes("/ns:Shofar/ns:RapidOnSite_Pump [@State!='Idle']", manager); 
+0

ありがとうございました。今は正常に動作します。私の新しい知識どうもありがとう。 –

0

XmlDocumentに固執しない限り、XElementを使用して作業を完了できます。終わり

XElement rootElem = XElement.Load(new StringReader(xmlStr)); 
var rapidOnSitePumpWhichAreNotIdle = rootElem.Descendants("RapidOnSite_Pump").Where(e => e.Attribute("State").Value != "Idle"); 

あなたは巡回できないIEnumerable<XElement>を取得します。

関連する問題