字符串生成器到XML遍历每个节点

本文关键字:遍历 节点 XML 字符串 | 更新日期: 2023-09-27 17:58:30

嗨,我有一个XML数据,它在StringBuilder中形成,如下

StringBuilder sb = new StringBuilder();
sb.Append("<?xml version='"1.0'" encoding='"utf-16'"?>");
sb.Append("<TEST>"
+ "<DEMO><CONTENTINFO  name='"Nani'" receiver='"Lucky'""
+ "/></DEMO></TEST>");
XmlDocument XMLDocument = new XmlDocument();
XMLDocument.LoadXml(sb.ToString());
XmlNodeList nodeList = XMLDocument.FirstChild.ChildNodes;
foreach (XmlNode node in nodeList)
{
}

我尝试使用XMLDocument遍历子节点以获得需要拆分数据的数据,这样它就可以给出name=Nanireceiver=lucky,或者将键和值存储在像dic.Add("name","nani") and dic.Add("receiver","lucky")这样的dictionary中。所以有人能帮我如何整理吗

字符串生成器到XML遍历每个节点

如果您喜欢形成一组强大的类实例,请使用XmlSerializer并创建类来表示XML结构的每个级别。

[XmlRoot("TEST")]
public class Test
{
     [XmlElement(Name = "DEMO")]
     public Demo Demo
     {
          get;
          set;
     }
} 
public class Demo
{
    [XmlElement("CONTENTINFO")]
    public ContentInfo ContentInfo
    {
       get;
       set;
    }
}
public class ContentInfo
{
   [XmlAttribute(Name = "name")]
   public string Name
   {
      get;
      set;
   }
   [XmlAttribute(Name = "receiver")]
   public string Reciever
   {
      get;
      set;
   }
}
XmlSerializer serializer = new XmlSerializer(typeof(Test));
serializer.Serialize(....);
Test testInstance = serializer.Deserialize(....);
... etc.

上面的代码还没有经过测试,但应该会为您提供要点。

为什么要使用StringBuilder生成XML?有更好的方法:

var root = new XDocument();
var test = new XElement("TEST");
var demo = new XElement("DEMO");
var contentInfo = new XElement("CONTENTINFO", 
                  new XAttribute("name", "Nani"), 
                  new XAttribute("receiver", "Lucky"));
demo.Add(contentInfo);
test.Add(demo);
root.Add(test);

要将所需的值提取到字典中,可以使用以下LINQ查询:

var foo = root.Descendants("DEMO").Elements("CONTENTINFO")
              .SelectMany(x => x.Attributes())
              .ToDictionary(x => x.Name.ToString(), x => x.Value.ToString());

这会给你一本字典,看起来像这样:

密钥:名称=价值:纳尼,

密钥:receiver=值:Lucky