我有这样的XML
<Node Name="segment_@85D819AE">
<Node Name="segment_body37sub0">
<Node Name="face_82C1EB14_4"/>
</Node>
<Node Name="segment_body37sub1">
<Node Name="face_82C1ED90_5"/>
</Node>
<Node Name="segment_body37sub2">
<Node Name="face_82C1EF38_6"/>
</Node>
</Node>
我想从上面的XML中获得以下内容。
face_82C1EB14_4
face_82C1ED90_5
face_82C1EF38_6
基本上列表中的所有Last元素
我正在使用c#Frame work 4.0。
答案 0 :(得分:1)
听起来你只是试图找到没有子元素的所有元素的名称,然后从每个元素投影到Name
属性值:
var names = doc.Descendants() // Or Descendants("Node")
.Where(x => !x.Elements().Any())
.Select(x => x.Attribute("Name").Value);
答案 1 :(得分:0)
I made this before reading the updates and seeing you got an answer. Leaving it here just in case.
internal class Program
{
private static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("C:/xmlExample.xml");
XmlNode firstChild = doc.DocumentElement.FirstChild;
List<string> returningStrList = new List<string>();
GetStringList(doc.DocumentElement.ParentNode, returningStrList);
Console.WriteLine();
}
private static void GetStringList(XmlNode node, List<string> strList)
{
if (node.HasChildNodes)
foreach (XmlNode childNode in node.ChildNodes)
GetStringList(childNode, strList);
if (!string.IsNullOrEmpty(node.Value))
strList.AddRange(node.Value.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
}
}
XML structure:
<?xml version='1.0'?>
<example xmlns="urn:example-schema">
<myNode>
<data a="1000" b="20">
100 20000
</data>
<data a="12512" b="25">
200 1000
</data>
<data>
<subData k="aaaa">
subDataText 20
</subData>
400 kakaaka
</data>
</myNode>
</example>