代码之家  ›  专栏  ›  技术社区  ›  Greg

从StringBuilder解析C#Xml

  •  3
  • Greg  · 技术社区  · 14 年前

    我有一个包含XML文件内容的StringBuilder。XML文件中有一个名为 <root> <node> 标签。

    我想通过XML来读取s中标记的值,但不知道如何做。

    提前谢谢

    7 回复  |  直到 14 年前
        1
  •  6
  •   user151323 user151323    14 年前
    StringBuilder sb = new StringBuilder (xml);
    
    TextReader textReader = new StringReader (sb.ToString ());
    XDocument xmlDocument = XDocument.Load (textReader);
    
    var nodeValueList = from node in xmlDocument.Descendants ("node")
                        select node.Value;
    
        2
  •  2
  •   LBushkin    14 年前

    System.Xml System.Xml.Linq

    XDocument 是用于XML的LINQ扩展的一部分,如果需要通过任意结构进行解析,则特别易于使用。我建议用它而不是 XmlDocument

    创建 X文件 StringBuilder 简单明了:

    var doc = XDocument.Parse( stringBuilder.ToString() );
    

    从这里,你可以使用 FirstNode , Descendents()

    var someData = from node in doc.Descendants ("yourNodeType")
                   select node.Value; // etc..
    
        3
  •  1
  •   Nick Jones    14 年前

    如果您只是查看特定命名的节点,那么不需要将文档加载到内存中,您可以使用XmlReader自己处理它。

    using(var sr = new StringReader(stringBuilder.ToString)) {
      using(var xr = XmlReader.Create(sr)) {
        while(xr.Read()) {
          if(xr.IsStartElement() && xr.LocalName == "node")
            xr.ReadElementString(); //Do something here
        }
      }
    }
    
        4
  •  0
  •   Zephyr was a Friend of Mine    14 年前

        5
  •  0
  •   Anthony Pegram    14 年前

    System.Xml 对象的命名空间,例如 XmlDocument 以及 XmlReader XmlWriter 对象族。如果使用C#3.0+,请查看 System.Xml.Linq XDocument 班级。

        7
  •  0
  •   Andrea Parodi    14 年前

    是的,我建议你使用 XmlDocument 对象来分析字符串的内容。

    var doc=new XmlDocument();
    doc.LoadXml(stringBuilder.TosTring());
    XmlNodeList elemList = doc.GetElementsByTagName("node");
    for (int i=0; i < elemList.Count; i++)
    {   
      XmlNode node=elemList[i];
      Console.WriteLine(node.InnerText);
    }  
    

    使用节点对象成员,还可以轻松地提取所有属性。