我有一个名为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");
这不起作用。我需要读取所有节点和属性值。
答案 0 :(得分:1)
尝试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; }
}
}