代码之家  ›  专栏  ›  技术社区  ›  Maestro1024

什么是读取此XML的好方法?

  •  2
  • Maestro1024  · 技术社区  · 14 年前

    什么是读取此XML的好方法?或者我可以用不同的方式构造XML。

    我想要的是过程是主要的,然后你可以有任何数量的相关过程来遵循。

      <Job>
        <Process>*something.exe</Process>
        <RelatedToProcess>*somethingelse.exe</RelatedToProcess>
        <RelatedToProcess>*OneMorething.exe</RelatedToProcess>
      </Job>
    

    我目前正在使用xmlnodelist并读取innerText,然后在*上拆分字符串,但我知道必须有更好的方法。

    7 回复  |  直到 14 年前
        1
  •  4
  •   Chris Conway    14 年前

    class Program
    {
        public class Job
        {
            public string Process { get; set; }
            public IList<string> RelatedProcesses { get; set; }
        }
        static void Main(string[] args)
        {
            var xml = "<Job>" +
                        "<Process>*something.exe</Process>" +
                            "<RelatedToProcess>*somethingelse.exe</RelatedToProcess>" +
                            "<RelatedToProcess>*OneMorething.exe</RelatedToProcess>" +
                          "</Job>";
            var jobXml = XDocument.Parse(xml);
    
            var jobs = from j in jobXml.Descendants("Job")
                        select new Job
                        {
                            Process = j.Element("Process").Value,
                            RelatedProcesses = (from r in j.Descendants("RelatedToProcess")
                                                select r.Value).ToList()
                        };
    
            foreach (var t in jobs)
            {
                Console.WriteLine(t.Process);
                foreach (var relatedProcess in t.RelatedProcesses)
                {
                    Console.WriteLine(relatedProcess);
                }
            }
    
            Console.Read();
    
        }
    }
    
        2
  •  5
  •   Andrew Bezzub    14 年前

    Linq To Xml XDocument XElement

        3
  •  4
  •   Simon Steele    14 年前

    XmlSerializer

    public class Job
    {
        public string Process { get; set; }
    
        [XmlElement("RelatedToProcess")]
        public List<string> RelatedProcesses { get; set; }
    }
    

    XmlSerializer serializer = new XmlSerializer(typeof(Job));
    using (var reader = XmlReader.Create(@"d:\temp\test.xml"))
    {
        Job j = (Job)serializer.Deserialize(reader);
        Console.WriteLine(j.Process);
        Console.WriteLine(j.RelatedProcesses.Count);
        j.RelatedProcesses.ForEach(p => Console.WriteLine(p));
    }
    
        4
  •  2
  •   anishMarokey FIre Panda    14 年前

    XDocument XElement

        5
  •  2
  •   zam6ak    14 年前

      <Job>
        <Process Name="*.something.exe">
            <RelatedToProcess>*somethingelse.exe</RelatedToProcess>
            <RelatedToProcess>*OneMorething.exe</RelatedToProcess>
        </Process>
      </Job>
    

        6
  •  2
  •   bla    14 年前

    XDocument

    XDocument xDoc = XDocument.Load("Process.xml");
    var process = from p in xDoc.Descendants("Process")
                  select p.Value;
    
    var relatedProcess = from p in xDoc.Descendants("RelatedToProcess")
                         select p.Value;
    
    Console.WriteLine("Process: {0}", process.ElementAtOrDefault(0).ToString());
    foreach (var p in relatedProcess)
        Console.WriteLine("RelatedToProcess: {0}", p);
    

    Process: *something.exe
    RelatedToProcess: *somethingelse.exe
    RelatedToProcess: *OneMorething.exe
    
        7
  •  1
  •   Nix    14 年前

    <Job>
      <Process>something.exe</Process>
      <RelatedProcess>
         <Process>
            <Name>somethingelse.exe</Name>
         </Process>
         <Process>
            <Name>OneMorething.exe
            </Name>
         </Process>
      </RelatedProcess>
    </Job>
    

    <Job>
      <Process>
         <Name>something.exe</Name>
         <RelatedProcess>
           <Process>
              <Name>somethingelse.exe</Name>
              <RelatedProcess>
                 <Process>
                  <Name>recursive.exe</Name>
                 </Process>
              </RelatedProcess>
           </Process>
           <Process>
              <Name>OneMorething.exe</Name>
           </Process>
        </RelatedProcess>
      </Process>
    </Job>
    

    string xml = "<Job>...xml here ";
    XDocument doc =  XDocument.Parse(xml);
    
    var Processess = from process in doc.Elements("Job").Elements("Process")
    
     select new
    {
        ProcessName = process.Element("Name"),
        RelatedProcesses = (from rprocess in process.Elements("RelatedProcess").Elements("Process")
                            select new
                            {
                                ProcessName = rprocess.Element("Name")
                            }
                             ).ToList()
    };