【问题标题】:How to get value of some object in XML string in C#?如何在 C# 中获取 XML 字符串中某些对象的值?
【发布时间】:2014-05-29 19:16:27
【问题描述】:

我有这个 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 中获取值?谢谢:))

【问题讨论】:

标签: c# xml


【解决方案1】:

您可能可以使用 xpath 来执行此操作。以下是一个示例 XPath,它将提供一个名称与“sitename”匹配的节点:

//KEY[@name="sitename"]

您可以稍作修改以查找具有“名称”属性的所有节点或仅查找特定名称。有关如何使用 XPath 的更多示例,请参阅MSDN site for XPath。以下是一段 C# 代码的 sn-p 代码,它向您展示了如何使用此 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\"]");

祝你好运!

【讨论】:

    【解决方案2】:

    为了完整起见,这里有一个 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));
    

    【讨论】:

    • 对不起,draw_w,我很懒,弄坏了你的绳子。
    • 你能看到我的question 之一关于 xml 响应吗?
    【解决方案3】:

    让我们将您的 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;
                 }
              }
    

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多