繁体   English   中英

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

[英]How to read child nodes from XML without knowing their names using C#?

如果这是以前问过的,我深表歉意。 (我只是在学习这个。)

说,我有以下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 *”子元素以及它们中有多少个呢?

您还可以使用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/zh-cn/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;
                    }
                }
            }
        }

此代码可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM