Разобрать строку узла в XMLNodeList - PullRequest
3 голосов
/ 17 ноября 2011

Мне любопытно, что было бы самым лучшим способом разобрать строку узлов 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 ();

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Вы можете добавить корень к вашему 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);
}
2 голосов
/ 17 ноября 2011

Вот пример программы, которая делает это, используя 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
...