XML解析 - 读取简单的XML文件并检索值

Luc*_*ity 30 .net c# xml parsing

我已经编写了一个用于学习目的的任务调度程序.目前我正在将计划任务保存为纯文本,然后使用Regex进行解析.这看起来很混乱(代码明智)并且不是非常连贯.

我想从XML文件加载计划任务,我已经搜索了很多,以找到一些解决方案,但我无法按照我想要的方式工作.

我写了一个像这样结构化的XML文件来存储我的数据:

<Tasks>
    <Task>
        <Name>Shutdown</Name>
        <Location>C:/WINDOWS/system32/shutdown.exe</Location>
        <Arguments>-s -f -t 30</Arguments>
        <RunWhen>
            <Time>8:00:00 a.m.</Time>
            <Date>18/03/2011</Date>
            <Days>
                <Monday>false</Monday>
                <Tuesday>false</Tuesday>
                <Wednesday>false</Wednesday>
                <Thursday>false</Thursday>
                <Friday>false</Friday>
                <Saturday>false</Saturday>
                <Sunday>false</Sunday>
                <Everyday>true</Everyday>
                <RunOnce>false</RunOnce>
            </Days>
        </RunWhen>
        <Enabled>true</Enabled>
    </Task>
</Tasks>
Run Code Online (Sandbox Code Playgroud)

我想解析数据的方式是这样的:

  1. 打开Tasks.xml
  2. 加载第一个Task标记.
  3. 在该任务中,检索Name,Location和Arguments标记的值.
  4. 然后打开RunWhen标记并检索时间和日期标记的值.
  5. 之后打开Days标记并检索其中每个标记的值.
  6. 检索Enabled的值.
  7. 加载下一个任务并重复步骤3 - > 7,直到解析了Tasks中的所有Task标记.

我非常肯定你可以这样做,我无法解决这个问题,因为有很多不同的方法可以用XML做事我有点不知所措.但到目前为止,我最有可能的是使用XPathDocument和XPathNodeIterator吗?

如果有人可以给我一个例子或向我解释如何做到这一点我会非常高兴.

Ser*_*hei 45

解析xml的简单方法是使用LINQ to XML

例如,您有以下xml文件

<library>
    <track id="1" genre="Rap" time="3:24">
        <name>Who We Be RMX (feat. 2Pac)</name>
        <artist>DMX</artist>
        <album>The Dogz Mixtape: Who's Next?!</album>
    </track>
    <track id="2" genre="Rap" time="5:06">
        <name>Angel (ft. Regina Bell)</name>
        <artist>DMX</artist>
        <album>...And Then There Was X</album>
    </track>
    <track id="3" genre="Break Beat" time="6:16">
        <name>Dreaming Your Dreams</name>
        <artist>Hybrid</artist>
        <album>Wide Angle</album>
    </track>
    <track id="4" genre="Break Beat" time="9:38">
        <name>Finished Symphony</name>
        <artist>Hybrid</artist>
        <album>Wide Angle</album>
    </track>
<library>
Run Code Online (Sandbox Code Playgroud)

要读取此文件,可以使用以下代码:

public void Read(string  fileName)
{
    XDocument doc = XDocument.Load(fileName);

    foreach (XElement el in doc.Root.Elements())
    {
        Console.WriteLine("{0} {1}", el.Name, el.Attribute("id").Value);
        Console.WriteLine("  Attributes:");
        foreach (XAttribute attr in el.Attributes())
            Console.WriteLine("    {0}", attr);
        Console.WriteLine("  Elements:");

        foreach (XElement element in el.Elements())
            Console.WriteLine("    {0}: {1}", element.Name, element.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想要复制/粘贴此代码的人,您还需要添加"using System.Xml.Linq;" (8认同)

Chr*_*Wue 12

我通常用XmlDocument它.界面非常简单:

var doc = new XmlDocument();
doc.LoadXml(xmlString);
Run Code Online (Sandbox Code Playgroud)

您可以访问类似于字典的节点:

var tasks = doc["Tasks"];
Run Code Online (Sandbox Code Playgroud)

并循环遍历节点的所有子节点.