如何在C#中获取XML字符串中某些对象的值?

时间:2014-04-15 12:23:34

标签: c# xml

我有这个XML字符串:

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

如何从Key获得价值&#34;用户名&#34; ?我希望得到&#34;这个价值&#34;在我的代码中。我尝试反序列化和任何其他代码,但它不起作用。请帮助我,谢谢:D

编辑:

我尝试使用此代码:

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

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

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

但是我是如何仅从名为&#34;用户名&#34;的KEY获得Value的? ?谢谢:))

3 个答案:

答案 0 :(得分:3)

您可以使用xpath来执行此操作。以下是一个示例XPath,它将为节点提供名称匹配&#34; sitename&#34;:

//KEY[@name="sitename"]

您可以稍微修改一下,找到所有带有&#34;名称&#34;的节点。属性或只是找到特定的名称。有关如何使用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\"]");

祝你好运!

答案 1 :(得分: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;
             }
          }

答案 2 :(得分:0)

为了完整性,这里有一个System.Xml.Linq版本,其中包含foreachs,其中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));