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

时间:2015-12-01 15:30:52

标签: c# xml

我有一个看起来像

的xml文件
<root>
 <allnames>
  <name1>george</name1>
  <name2>lukas</name2>
  <name3>nick</name3>
 </allnames>
</root>

我想在Node&#34; Allnames&#34;下添加一个数组。每个孩子 所以阵列看起来像 {&#34; george&#34;,&#34; lukas&#34;,&#34; nick&#34; (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;
        }
}

它返回:{&#34; georgelukasnick&#34; }(1项)。

我想要的只是返回3项而不是1 ..任何帮助?

2 个答案:

答案 0 :(得分:3)

您正在错误地访问文本。

基本上,您选择.container{ width: 400px; } .images-cq__item{ width: 120px; height: 120px; background: green; margin-right: 10px; margin-bottom: 10px; display: inline-block; } 元素(单个节点),然后将其AllNames值添加到列表中 - 但InnerText的{​​{1}}为<强>所有的内部文本连接起来。

您应该选择InnerText元素,然后遍历其子元素 - 您可以使用XPath执行此操作:

AllNames

您也可以通过XDocument类以更简单的方式使用LINQ to XML(我的AllNames变量是您的示例XML):

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

嗯,对我来说更简单;)

答案 1 :(得分:2)

使用选择&#34; allnames&#34;的子节点的Xpath。 像这样:

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