从 StringBuilder 解析 C# Xml

发布于 2024-09-24 15:46:24 字数 204 浏览 7 评论 0原文

我有一个包含 XML 文件内容的 StringBuilder。 XML 文件内有一个名为 的根标记,并包含多个 标记。

我想解析 XML 以读取 s 中标签的值,但不知道该怎么做。

为此我必须使用一些 C# XML 数据类型吗?

提前致谢

I have a StringBuilder with the contents of an XML file. Inside the XML file is a root tag called <root> and contains multiple <node> tags.

I'd like to parse through the XML to read values of tags within in s, but not sure how to do it.

Will I have to use some C# XML data type for this?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

过气美图社 2024-10-01 15:46:25

如果您希望读取 XML 文件中的所有值,您可以考虑将 XML 反序列化为 C# 数据对象。

在 C# 中将 XML 反序列化为类 obj

If you're looking to read all the values in the XML file , you could look into deserializing the XML into a C# data Object.

Deserializing XML into class obj in C#

爱已欠费 2024-10-01 15:46:25

是的,我建议您使用 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);
}  

使用 Node 对象成员,您还可以轻松提取所有属性。

Yes, I suggest you use an XmlDocument object to parse the content of your string.
Here is an example who print all inner text contained in your tags:

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);
}  

using Node object members, you can also easily extract all you attributes .

一念一轮回 2024-10-01 15:46:24
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;
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;
谎言 2024-10-01 15:46:24

您应该使用 System.Xml< 中提供的类/code>System.Xml.Linq 解析 XML。

XDocument 是 XML 的 LINQ 扩展的一部分,如果您需要解析任意结构,则特别容易使用。我建议使用它而不是 XmlDocument (除非您有遗留代码或不在 .NET 3.5 上)。

StringBuilder 创建 XDocument 非常简单:

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

从这里,您可以使用 FirstNodeDescendents( ),以及许多其他可用于遍历和检查 XML 结构的属性和方法。由于 XDocument 旨在与 LINQ 良好配合,因此您还可以编写如下查询:

var someData = from node in doc.Descendants ("yourNodeType")
               select node.Value; // etc..

You should use classes available in either System.Xml or System.Xml.Linq to parse XML.

XDocument is part of the LINQ extensions for XML and is particularly easy to use if you need to parse through an arbitrary structure. I would suggest using it rather than XmlDocument (unless you have legacy code or are not on .NET 3.5).

Creating an XDocument from a StringBuilder is straightforward:

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

From here, you can use FirstNode, Descendents(), and the many other properties and methods available to walk and examine the XML structure. And since XDocument is designed to work well with LINQ, you can also write queries like:

var someData = from node in doc.Descendants ("yourNodeType")
               select node.Value; // etc..
舂唻埖巳落 2024-10-01 15:46:24

如果您只是查找特定命名的节点,则无需将文档加载到内存中,您可以使用 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
    }
  }
}

If you are just looking the specifically named nodes then you don't need to load the document into memory, you can process it yourself with an 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
    }
  }
}
春夜浅 2024-10-01 15:46:24

使用 XDocument.Parse(...)

use XDocument.Parse(...)

時窥 2024-10-01 15:46:24

您可以使用多个对象来处理 XML。查看 System.Xml 命名空间中的对象,例如 XmlDocument 以及 XmlReaderXmlWriter 系列对象。如果使用 C# 3.0+,请查看 System.Xml.Linq 命名空间和 XDocument 类。

There are several objects at your disposal for working with XML. Look at the System.Xml namespace for objects such as XmlDocument as well as the XmlReader and XmlWriter families of objects. If using C# 3.0+, look at the System.Xml.Linq namespace and the XDocument class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文