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件。有什么帮助吗?
您访问文本不正确。
基本上,您选择AllNames
元素(单个节点),然后将其InnerText
值添加到列表中,但AllNames
的InnerText
是连接的所有内部文本。
您应该选择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/*");