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

时间:2012-03-17 03:27:17

标签: c# asp.net xml

如果之前有人问过,我道歉。 (我只是在学习这个。)

说,我有以下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>

说,我使用:

进入“row”元素
//xmlReader is of type XmlReader
xmlReader.ReadToFollowing("Row");

但是如何收集所有“c *”子元素,而不知道他们的名字以及有多少元素?

4 个答案:

答案 0 :(得分:3)

你也可以使用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

希望它有所帮助!

答案 1 :(得分:2)

使用Linq to XML,您可以使用Elements()获取所有直接子项(或使用Descendants代表任何后代):

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

答案 2 :(得分:1)

试试这个

                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;

                    }

                }

答案 3 :(得分:0)

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

此代码可以正常工作。