我有一个简单的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的新手。 :)
答案 0 :(得分:0)
使用XPath语法选择您需要的内容。
使用.Net中的XmlDocument类以及XPath表达式。
答案 1 :(得分:0)
尝试以下代码:
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查询,它选择所有子任务的子任务。 您可以在此处找到有关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);
}
答案 2 :(得分:0)
尝试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();
}
}
}