Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#拆分xml innertext或解析innerxml_C#_Xml_Innertext_Innerxml - Fatal编程技术网

C#拆分xml innertext或解析innerxml

C#拆分xml innertext或解析innerxml,c#,xml,innertext,innerxml,C#,Xml,Innertext,Innerxml,我有一个结构与此类似的XML文件 <entry name="something"> <members> <member>aaa</member> <member>bbb</member> </members> </entry> <entry name="something_else"> <members> <member>ccc&

我有一个结构与此类似的XML文件

<entry name="something">
  <members>
    <member>aaa</member>
    <member>bbb</member>
  </members>
</entry>
<entry name="something_else">
  <members>
    <member>ccc</member>
    <member>ddd</member>
  </members>
</entry>

aaa
bbb
ccc
ddd
我需要能够从每个成员节点中获取要存储在数据表中的值。如果我使用innertext属性,它会连接这些值(aaabbb)。没有任何东西可以用来分开绳子。我也可以使用内部XML,但我只得到一个XML结构的字符串(aaa bbb)

从XML元素中获取每个值并将其存储在字符串数组中的最佳方法是什么

这就是我一直在尝试的

foreach (XmlNode grpNode in GrpList)
{
    subNode = grpNode.Attributes["name"];
    if (subNode != null)
    {
        Obj = grpNode.Attributes["name"].Value;
    }

    subNode = grpNode["members"];
    if (subNode != null)
    {
        string innerXml = string.Empty;
        innerXml = grpNode["members"].InnerXml.ToString();

        string[] tempArrary = innerXml.Split(new char[] {'>', '<'});
    }
}
foreach(GrpList中的XmlNode grpNode)
{
subNode=grpNode.Attributes[“name”];
if(子节点!=null)
{
Obj=grpNode.Attributes[“name”].Value;
}
子节点=grpNode[“成员”];
if(子节点!=null)
{
string innerXml=string.Empty;
innerXml=grpNode[“members”].innerXml.ToString();

string[]temparary=innerXml.Split(新字符[]{'>,'您需要迭代
成员中的子元素,因此类似于:

foreach (var node in grpNode["members"].ChildNodes)
{
    var value = node.InnerText;
}
也就是说,除非您有特定的理由使用
XmlDocument
,否则最好使用LINQ-to-XML。这将为您提供更具表现力的代码,例如:

var doc = XDocument.Parse(xml);

var something = doc.Descendants("entry")
    .Where(e => (string)e.Attribute("name") == "something")
    .Single();

var somethingMembers = something.Descendants("member")
    .Select(e => e.Value)
    .ToArray();

这应该可以做到:

XDocument xdoc = XDocument.Load(@"Path/to/file");
var result = xdoc.Descendants("member").Select (x => x.Value).ToArray();
结果:


您提供的xml无效。但是,假设您只想将所有
成员
节点的内部文本放入字符串数组,我只想使用Linq To xml(XDocument):


尽管您使用的是旧的
XmlDocument
API,但通过引入一个,您可以将一个转换为一个通用可枚举,从而混合使用一些linq和lambda语法,例如:

var tempArrary = subNode.SelectNodes("member").OfType<XmlNode>().Select(n => n.InnerText).ToArray();
var temparary=subNode.SelectNodes(“成员”).OfType().Select(n=>n.InnerText.ToArray();

您可以使用Xpath遍历条目节点,并获得其中的成员,如下所示

string xml=“”+
"" + 
“aaa”+
“bbb”+
"" + 
"" + 
"" + 
"" + 
“ccc”+
“ddd”+
"" +
"";
XmlDocument doc=新的XmlDocument();
doc.LoadXml(xml);
var memsList=doc.SelectNodes(//条目);
foreach(memsList中的XmlNode a)
{
Console.WriteLine(a.Attributes[“name”].Value);
var memList=a.SelectNodes(“成员/成员”);
foreach(memList中的xmlnodex)
Console.WriteLine(x.InnerText);

}
是的,您是对的,在我的回答中更新了xpath查询。感谢您指出这一点。
var tempArrary = subNode.SelectNodes("member").OfType<XmlNode>().Select(n => n.InnerText).ToArray();