如何使用XDocument从xml中选择元素

问题描述 投票:0回答:1

我有一个名为Employee.xml的XML文件,具有以下内容。

<xyz:Employee>
    xmlns:xyz="http://xyz/Schema/Common/1"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xyz:EmployeeDetail  xsi:type="xyz:EmployeeDetailIRD" name="EmpNAme">
        <xyz:State>Permanent</xyz:State>
        <xyz:Assignments>
            <xyz:Assignment>
                <xyz:JoiningDetail Department="support">
                <xyz:JoiningDate>2019-10-23</xyz:JoiningDate>
                </xyz:JoiningDetail>
            </xyz:Assignment>
        </xyz:Assignments>
    </xyz:EmployeeDetail>
</xyz:Employee>

我正在尝试获取所有节点并读取值。

使用C#代码

 string xmlVal = File.ReadAllText(@"Employee.xml"); 
    XDocument empDocument = XDocument.Parse(xmlVal);
    XElement tempElement =     
    empDocument.XPathSelectElement("xyz:EmployeeDetail");

这不起作用。我需要读取所有节点和属性值。

c# linq-to-xml
1个回答
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
    {
         const string FILENAME = @"c:\temp\test.xml";
         static void Main(string[] args)
         {
             XDocument doc = XDocument.Load(FILENAME);
             XElement root = doc.Root;
             XNamespace xyzNs = root.GetNamespaceOfPrefix("xyz");
             List<EmployeeDetail> employeeDatails = doc.Descendants(xyzNs + "EmployeeDetail").Select(x => new EmployeeDetail()
             {
                 name = (string)x.Attribute("name"),
                 state = (string)x.Element(xyzNs + "State"),
                 assignments = x.Descendants(xyzNs + "Assignment").Select(y => new Assignment()
                 {
                     department = (string)y.Element(xyzNs + "JoiningDetail").Attribute("Department"),
                     joinDate = (DateTime)y.Descendants(xyzNs + "JoiningDate").FirstOrDefault()
                 }).ToList()
             }).ToList();
         }
    }
    public class EmployeeDetail
    {
        public string name { get; set; }
        public string state { get; set; }
        public List<Assignment> assignments { get; set; }
    }
    public class Assignment
    {
        public string department { get; set; }
        public DateTime joinDate { get;set; }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.