【发布时间】:2017-12-12 15:03:00
【问题描述】:
在我的项目中,我使用了一个时间日志 API,其中包括一个长 XML 文件,其中包括员工 ID、姓名、公司名称、ID 等。现在我想将该 XML 属性存储到一个带有该属性名称标题的 CSV 文件中。例如员工姓名、员工 ID 等。使用我的代码,XML 文件的循环现在正在工作。它会给出所有错误消息,有时会多次给出一个值。
我的项目的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<tlp:WorkUnits xmlns:tlp="http://www.timelog.com/XML/Schema/tlp/v4_4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.timelog.com/XML/Schema/tlp/v4_4 http://www.timelog.com/api/xsd/WorkUnitsRaw.xsd">
<tlp:WorkUnit ID="130">
<tlp:EmployeeID>3</tlp:EmployeeID>
<tlp:AllocationID>114</tlp:AllocationID>
<tlp:TaskID>239</tlp:TaskID>
<tlp:ProjectID>26</tlp:ProjectID>
<tlp:ProjectName>LIK Template</tlp:ProjectName>
</tlp:WorkUnit>
我有一个工作单元类,其中我为 XML 声明了属性。
现在我创建了一个类,我想在其中循环遍历 XML 并将该文件存储到 CSV 中,但没有正确显示。
这是那个类
namespace TimeLog.ApiConsoleApp
{
/// <summary>
/// Template class for consuming the reporting API
/// </summary>
public class ConsumeReportingApi
{
private static readonly ILog Logger = LogManager.GetLogger(typeof(ConsumeReportingApi));
public static void Consume()
{
if (ServiceHandler.Instance.TryAuthenticate())
{
if (Logger.IsInfoEnabled)
{
Logger.Info("Successfully authenticated on reporting API");
}
var customersRaw = ServiceHandler.Instance.Client.GetWorkUnitsRaw(ServiceHandler.Instance.SiteCode,
ServiceHandler.Instance.ApiId,
ServiceHandler.Instance.ApiPassword,
);
if (customersRaw.OwnerDocument != null)
{
var namespaceManager = new XmlNamespaceManager(customersRaw.OwnerDocument.NameTable);
namespaceManager.AddNamespace("tlp", "http://www.timelog.com/XML/Schema/tlp/v4_4");
var workUnit = customersRaw.SelectNodes("tlp:WorkUnit", namespaceManager);
if (workUnit != null)
{
var output = new StringBuilder();
foreach (XmlNode customer in workUnit)
{
var unit = new WorkUnit();
var childNodes = customer.SelectNodes("./*");
if (childNodes != null)
{
foreach (XmlNode childNode in childNodes)
{
if (childNode.Name == "tlp:EmployeeID")
{
unit.EmployeeID = Int32.Parse(childNode.InnerText);
}
if (childNode.Name == "tlp:EmployeeFirstName")
{
unit.ProjectName = childNode.InnerText;
}
if (childNode.Name == "tlp:EmployeeLastName")
{
unit.ProjectName = childNode.InnerText;
}
if (childNode.Name == "tlp:AllocationID")
{
unit.ProjectName = childNode.InnerText;
}
if (childNode.Name == "tlp:TaskName")
{
unit.ProjectName = childNode.InnerText;
}
}
output.AppendLine($"{unit.EmployeeID},{unit.EmployeeFirstName},{unit.EmployeeLastName},{unit.AllocationID},{unit.TaskName}");
}
Console.WriteLine(output.AppendLine($"{unit.EmployeeID},{unit.EmployeeFirstName},{unit.EmployeeLastName},{unit.AllocationID},{unit.TaskName}"));
}
}
}
else
{
if (Logger.IsWarnEnabled)
{
Logger.Warn("Failed to authenticate to reporting API");
}
}
}
}
}
}
我的输出文件如下所示
387,,,-1,
387,,,-1,
388,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
410,,,-1,
387,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
388,,,-1,
410,,,-1,
447,,,-1,
【问题讨论】: