如何使用C#在不知道名称的情况下从XML中读取子节点

本文关键字:情况下 XML 子节点 读取 何使用 不知道 | 更新日期: 2023-09-27 18:28:01

如果之前有人问我这个问题,我深表歉意。(我只是在学习。)

比方说,我有以下XML:

<Row>
<c0>1</c0>
<c1>31b64f1cb075</c1>
<c2>Developer</c2>
<c3/>
<c4/>
<c5/>
<c6/>
<c7/>
<c8>USA</c8>
<c9>http://www.microsoft.com</c9>
<c10>sales@microsoft.com</c10>
<c11/>
<c12/>
<c13/>
<c14>-2147483648</c14>
<c15>2012-03-08T09:55:42-08:00</c15>
<c16>00000000-0000-0000-0000-000000000000</c16>
<c17>587312C</c17>
</Row>

比方说,我通过使用到达"行"元素

//xmlReader is of type XmlReader
xmlReader.ReadToFollowing("Row");

但是,我如何收集所有不知道名字的"c*"子元素,以及其中有多少?

如何使用C#在不知道名称的情况下从XML中读取子节点

您还可以使用XmlDocument加载xml,并简单地循环通过子节点,如

XmlDocument doc = new XmlDocument();
doc.LoadXml("yourxml");
XmlNode root = doc.FirstChild;
//Display the contents of the child nodes.
if (root.HasChildNodes)
{
  for (int i=0; i<root.ChildNodes.Count; i++)
  {
    Console.WriteLine(root.ChildNodes[i].InnerText);
  }
}

你可以在这里阅读更多信息http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.childnodes.aspx

希望它能有所帮助!

使用Linq到XML,您可以只使用Elements()来获取所有直接子级(或对任何子级使用Descendants):

XElement root = XElement.Load("test.xml"); //contains your xml
foreach (var child in root.Elements())
{
    Console.WriteLine(child.Name);
}

试试这个

                XmlDocument xdoc = new XmlDocument();//xml doc used for xml parsing
                xdoc.Load(@"test.xml");//loading XML in xml doc
                if (xdoc.ChildNodes.Count > 0)
                {
                    XmlNodeList xm = xdoc.DocumentElement.ChildNodes;
                    // In this loop you have get all the child control 
                    foreach (XmlNode x in xm) 
                    {
                       string data=  x.InnerXml;
                    }
                }
        var xml="<Row>...</Row>"
        var xmlReader = XmlReader.Create(new StringReader(xml));
        if (xmlReader.ReadToFollowing("Row"))
        {
            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.Element)
                {
                    var name = xmlReader.Name;
                    //read value of element.
                    while (xmlReader.Read())
                    {                            
                        if (xmlReader.NodeType == XmlNodeType.Whitespace)
                            break;
                        if (xmlReader.NodeType == XmlNodeType.Text)
                        {
                            var value = xmlReader.Value;
                        }
                        else if (xmlReader.NodeType == XmlNodeType.EndElement)
                            break;
                    }
                }
            }
        }

这个代码可以工作。