从Xml的节点中获取节点
本文关键字:节点 获取 Xml | 更新日期: 2023-09-27 18:03:26
我有一个简单的xml文件。如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<activities>
<task>
<name> Task1 </name>
<time> 00:00 </time>
<subtask>
<name> Task1 - subtask1 </name>
<time> 00:00 </time>
</subtask>
<subtask>
<name> Task1 - subtask2 </name>
<time> 00:00 </time>
</subtask>
</task>
<task>
<name> Task2 </name>
<time> 00:00 </time>
<subtask>
<name> Task2 - subtask1 </name>
<time> 00:00 </time>
</subtask>
</task>
</activities>
我的问题是如何从每个任务中获得每个子任务节点?例如,首先我想获得任务1和相关的子任务(subtask1, subtask2)及其数据。
我如何在c#中以适当的方式做到这一点?我是XML的新手。:)
使用XPath语法选择需要的内容。
使用。net中的XmlDocument类和XPath表达式。
试试下面的代码:
String myXML = @" <?xml version='1.0' encoding='utf-8' ?>
<activities>
<task>
<name> Task1 </name>
<time> 00:00 </time>
<subtask>
<name> Task1 - subtask1 </name>
<time> 00:00 </time>
</subtask>
<subtask>
<name> Task1 - subtask2 </name>
<time> 00:00 </time>
</subtask>
</task>
<task>
<name> Task2 </name>
<time> 00:00 </time>
<subtask>
<name> Task2 - subtask1 </name>
<time> 00:00 </time>
</subtask>
</task>
</activities>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(myXML);
XmlNodeList items = doc.DocumentElement.SelectNodes("//subtask");
SelectNodes参数是一个XPath查询,它选择作为task的直接子任务的所有子任务。您可以在这里找到更多关于XPath的信息:http://www.w3schools.com/xpath/default.asp
你可以阅读下面的信息:
List<String> names=new List<string>();
for(int i=0;i<items.Count;i++)
{
names.Add(items.Item(i).InnerText);
}
尝试XML LInq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<?xml version='"1.0'" encoding='"utf-8'" ?>" +
"<activities>" +
"<task>" +
"<name>Task1</name>" +
"<time>00:00</time>" +
"<subtask>" +
"<name>Task1 - subtask1</name>" +
"<time>00:00</time>" +
"</subtask>" +
"<subtask>" +
"<name>Task1 - subtask2</name>" +
"<time>00:00</time>" +
"</subtask>" +
"</task>" +
"<task>" +
"<name>Task2</name>" +
"<time>00:00</time>" +
"<subtask>" +
"<name>Task2 - subtask1</name>" +
"<time>00:00</time>" +
"</subtask>" +
"</task>" +
"</activities>" ;
XDocument doc = XDocument.Parse(input);
var results = doc.Descendants("task").Select(x => new {
name = x.Element("name").Value,
time = x.Element("time").Value,
subtask = x.Elements("subtask").Select(y => new {
name = y.Element("name").Value,
time = y.Element("time").Value
}).ToList()
}).ToList();
}
}
}