C#读取父节点下的所有节点内部文本

本文关键字:节点 内部 文本 读取 父节点 | 更新日期: 2023-09-27 18:25:10

我有一个看起来像的xml文件

<root>
 <allnames>
  <name1>george</name1>
  <name2>lukas</name2>
  <name3>nick</name3>
 </allnames>
</root>

我正试图在节点"Allnames"下为每个孩子添加一个数组所以数组看起来像{"乔治"、"卢卡斯"、"尼克"}(3项)。

相反,使用此代码

public string[] getStrings(string path)
        try
        {
            List<string> whatToReturn = new List<string>();
            XmlNodeList nodelist = xml.SelectNodes(path);
            foreach (XmlNode node in nodelist)
            {
                whatToReturn.Add(node.InnerText);
            }

            return whatToReturn.ToArray();
        }
        catch (System.NullReferenceException)
        {
            return null;
        }
}

它返回:{"georgelukasnick"}(1项)。

我只想退回3件而不是1件。有什么帮助吗?

C#读取父节点下的所有节点内部文本

您访问文本不正确。

基本上,您选择AllNames元素(单个节点),然后将其InnerText值添加到列表中,但AllNamesInnerText是连接的所有内部文本。

您应该选择AllNames元素,然后遍历它的子元素——您可以使用XPath:来实现这一点

XmlNodeList nodeList = xml.SelectNodes("root/allnames/child::node()");

您也可以通过XDocument类使用LINQ to XML以一种更简单的方式来实现这一点(其中我的xmlString变量是您的示例XML):

    var xDocument = XDocument.Parse(xmlString);
    var strings = xDocument.Descendants("allnames").First().Elements().Select(x => x.Value).ToArray();

嗯,对我来说更简单;)

使用Xpath来选择"allnames"的子节点。像这样:

xml.SelectNodes("root/allnames/*");