C#拆分xml innertext或解析innerxml
我有一个结构与此类似的XML文件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&
<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();