【问题标题】:Parse node string to XMLNodeList将节点字符串解析为 XMLNodeList
【发布时间】:2011-11-17 17:01:16
【问题描述】:

我很好奇,将一串 xml 节点解析为 XmlNodeList 的最佳方法是什么。例如;

string xmlnodestr = "<mynode value1='1' value2='123'>abc</mynode>
<mynode value1='1' value2='123'>abc</mynode>
<mynode value1='1' value2='123'>abc</mynode>";

我可以对列表进行字符串拆分,但这会很混乱且不合适。

理想情况下,我想要类似的东西;

XmlNodeList xmlnodelist = xmlnodestr.ParseToXmlNodeList();

【问题讨论】:

  • 您必须以一种或另一种方式解析 XML,所以我认为“cast”这个词不太合适。
  • 同意,我的标题是 Cast to Parse。
  • 'changed' 是缺少的单词。阅读障碍:-)

标签: c# xmlnodelist


【解决方案1】:

您可以在您的 XML 中添加一个根目录,然后使用这种方法:

string xmlnodestr = @"<mynode value1=""1"" value2=""123"">abc</mynode><mynode value1=""1"" value2=""123"">abc</mynode><mynode value1=""1"" value2=""123"">abc</mynode>";
string xmlWithRoot = "<root>" + xmlnodestr + "</root>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlWithRoot);
XmlNodeList result = xmlDoc.SelectNodes("/root/*");

foreach (XmlNode node in result)
{
    Console.WriteLine(node.OuterXml);
}

如果您可以使用 LINQ to XML,这会简单得多,但您不会使用 XmlNodeList

var xml = XElement.Parse(xmlWithRoot);
foreach (var element in xml.Elements())
{
    Console.WriteLine(element);
}

【讨论】:

  • 我喜欢底部的 LINQ 语句。 :-)
【解决方案2】:

这是一个使用 XmlDocumentFragment 的示例程序,在 .NET 2.0 中进行了测试:

using System;
using System.Xml;
using System.Xml.XPath;

public class XPathTest
{
    public static void Main() {

        XmlDocument doc = new XmlDocument();
        string xmlnodestr = @"<mynode value1='1' value2='123'>abc</mynode>
<mynode value1='1' value2='123'>abc</mynode>
<mynode value1='1' value2='123'>abc</mynode>";

        XmlDocumentFragment frag = doc.CreateDocumentFragment();
        frag.InnerXml = xmlnodestr;

        XmlNodeList nodes = frag.SelectNodes("*");

        foreach (XmlNode node in nodes)
        {
            Console.WriteLine(node.Name + " value1 = {0}; value2 = {1}",
                              node.Attributes["value1"].Value,
                              node.Attributes["value2"].Value);
        }
    }
}

它产生以下输出:

mynode value1 = 1; value2 = 123
mynode value1 = 1; value2 = 123
mynode value1 = 1; value2 = 123

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2022-06-19
    • 2021-06-30
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多