2014-04-15 44 views
0

我有這樣的XML字符串:如何獲取C#中的XML字符串中的某些對象的值?

<RESPONSE> 
    <SINGLE> 
     <KEY name="sitename"> 
      <VALUE>Stackoverflow</VALUE> 
     </KEY> 
     <KEY name="username"> 
      <VALUE>this value</VALUE> 
     </KEY> 
    </SINGLE> 
</RESPONSE> 

如何從密鑰名「用戶名」值?我想在我的代碼中獲得「這個值」的值。我嘗試反序列化和任何其他代碼,但它不起作用。請大家幫幫我,謝謝:d

編輯:

我嘗試使用此代碼:

XDocument doc = XDocument.Load("myXML.xml"); 

var keys = doc.Descendants("KEY"); 

foreach (var VALUE in keys) 
{ 
    Console.WriteLine(VALUE.Value); 
} 

但如何做,我只從一個名爲「用戶名」 KEY獲取價值?謝謝:))

+1

到目前爲止你在做什麼? – jomsk1e

+0

看看這個答案http://stackoverflow.com/questions/7119806/c-sharp-reading-data-from-xml – Jay

+0

通常你會嘗試從一個具體的密鑰獲得一個值,在這種情況下你正在做相反... –

回答

0

爲了完整這裏是一個System.Xml.Linq的版本,與foreach和哪裏是System.Linq的好辦法。這基本上是提問者的嘗試,以及根據屬性過濾哪裏。

const string example_xml = "<RESPONSE> <SINGLE> <KEY name=\"sitename\"> <VALUE>Stackoverflow</VALUE> </KEY> <KEY name=\"username\"> <VALUE>this value</VALUE> </KEY> </SINGLE> </RESPONSE>"; 

XDocument doc = XDocument.Parse(example_xml); 
var keys = doc.Descendants("KEY"); 
var userKeys = keys.Where(item => item.Attribute("name").Value == "username").ToList(); 
userKeys.ForEach(item => Console.WriteLine(item.Value)); 
+0

對不起drew_w,我是懶惰的,給你的字符串加上了缺口 –

+0

非常感謝:)) – user2565280

3

你可以使用xpath來做到這一點。下面是一個例子的XPath,將提供一個節點與名稱匹配的「網站名稱」:

//KEY[@name="sitename"] 

您可以修改此略有找到所有節點具有「name」屬性,或者隨便找個具體名稱。有關如何使用XPath的更多示例,請參見MSDN site for XPath。以下是C#代碼片段展示瞭如何使用這個XPath(再次,可以概括爲任何你需要的XPath):

const string example_xml = "<RESPONSE> <SINGLE> <KEY name=\"sitename\"> <VALUE>Stackoverflow</VALUE> </KEY> <KEY name=\"username\"> <VALUE>this value</VALUE> </KEY> </SINGLE> </RESPONSE>"; 

// load 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(example_xml); 

// Query single or multiple nodes using the XPath, do what you want with this node! 
var desiredNode = doc.SelectSingleNode("//KEY[@name=\"sitename\"]"); 

祝您好運!

0

讓我們考慮您的XML文檔作爲XYZ.xml,那麼你可以嘗試下面的代碼,如果你使用的是C#,下面是例子只是

 XmlDocument Doc = new XmlDocument(); 
     Doc.Load(Server.MapPath(".../xyz.xml")); 
     XmlNodeList itemList = Doc.DocumentElement.SelectNodes("KEY"); 
     foreach (XmlNode currNode in itemList) 
     { 
      string name = string.Empty; 
      XmlNode item = currNode.SelectSingleNode("KEY"); 
      if(currNode["name"].InnerText == "username")//if you are aware of key name, use this  condition 
      { 
       name = item.Attributes["name"].Value.ToString(); // or currNode["name"].InnerText; 
      } 
      } 
相關問題