【问题标题】:Getting attributes from XML using c#使用 C# 从 XML 获取属性
【发布时间】:2026-02-03 22:25:01
【问题描述】:

我在字符串变量中有以下 xml 内容。我想以字符串的形式获取每个属性(JID)的值。

下面是我的xml

  <query xmlns="http://jabber.org/protocol/muc#admin">
  <item affiliation="member" jid="a@something.com" />
  <item affiliation="member" jid="b@something.com" />
  <item affiliation="member" jid="c@something.com" />
  <item affiliation="member" jid="d@something.com" />
  <item affiliation="member" jid="e@something.com" />
  <item affiliation="member" jid="f@something.com" />
  <item affiliation="member" jid="g@something.com" />
  <item affiliation="member" jid="h@something.com" />
  <item affiliation="member" jid="i@something.com" />
  <item affiliation="member" jid="j@something.com" />
  </query>

请任何人提出一些想法来找到这个。 我的预期输出是这样的

   a@something.com
   b@something.com
   c@something.com
   d@something.com
   e@something.com
   f@something.com

【问题讨论】:

    标签: c# .net xml linq-to-xml xmldocument


    【解决方案1】:
    DataSet dsXml = new DataSet();
    dsXml.ReadXmlSchema(Server.MapPath("~/Temp") + "//" + FileName);
    dsXml.ReadXml(Server.MapPath("~/Temp") + "//" + FileName, XmlReadMode.InferTypedSchema);
     if (!string.IsNullOrEmpty(dsXml.GetXml()))
    {
      for (int i = 0; i < dsXml.Tables.Count; i++)
                {
    
    lblInfo.Text = lblInfo.Text + dsXml.Tables["item"].Rows[i]["jid"].ToString()
               }
    }
    

    【讨论】:

    • 我没有从 .xml 文件中读取 xml,我只是读取了字符串变量中的 xml 内容,例如 string xmlQuery=" &lt;query xmlns...&gt;";
    【解决方案2】:

    Linq to XML 是解决它的一种方法。 .Parse 中的“”在哪里 - 将字符串变量与 xml 放在一起。

               List<XAttribute> jids = XDocument.Parse("").Root.Elements().Attributes().ToList();
                foreach (XAttribute a in jids)
                {
                  if (a.Name =="jid") 
                  {
                    string jid = a.Value;
                  }
                }
    

    【讨论】:

    • 如果您已将 XML 保存为“file.xml”,请使用 XDocument.Load(PathToFile + "file.xml")
    • @Cody Popham 完美答案!这就是我要找的。​​span>
    • 是的!不要忘记将问题标记为已回答。帮助社区。​​span>
    【解决方案3】:

    试试这个

      var data = @" <query xmlns=""http://jabber.org/protocol/muc#admin"">
      <item affiliation=""member"" jid=""a@something.com"" />
      <item affiliation=""member"" jid=""b@something.com"" />
      <item affiliation=""member"" jid=""c@something.com"" />
      <item affiliation=""member"" jid=""d@something.com"" />
      <item affiliation=""member"" jid=""e@something.com"" />
      <item affiliation=""member"" jid=""f@something.com"" />
      <item affiliation=""member"" jid=""g@something.com"" />
      <item affiliation=""member"" jid=""h@something.com"" />
      <item affiliation=""member"" jid=""i@something.com"" />
      <item affiliation=""member"" jid=""j@something.com"" />
      </query>";
                var xml = XElement.Parse(data);
                var r = xml.Elements();
                var result = r.Select(item => item.Attribute("jid")?.Value).ToArray();
    

    【讨论】:

      【解决方案4】:

      要实现所需的输出,您可以使用 XMLDocument 、 XMLNode 和 XMLNodeList ,如下所示

      string sb = "<query xmlns=\"http://jabber.org/protocol/muc#admin\">" +
                               "  <item affiliation=\"member\" jid=\"a@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"b@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"c@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"d@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"e@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"f@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"g@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"h@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"i@something.com\" />" +
                               "  <item affiliation=\"member\" jid=\"j@something.com\" />" +
                               "  </query>";
      
                  XmlDocument doc = new XmlDocument();
                  doc.LoadXml(sb);
      
                  XmlNodeList allXmlNode = doc.GetElementsByTagName("item");
                  if (allXmlNode.Count >= 1)
                  {
                      foreach (XmlNode node in allXmlNode)
                      {
                          System.Console.WriteLine(node.Attributes[1].InnerText);
                      }
                  }
      

      【讨论】: