所需的输出
我正在尝试使用xpath读取xml文档。我能够阅读某些内容,但有些则看不到。我正在尝试读取此xml文件并将此信息写入excel文件
我尝试了以下
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:/Users/mypc/Documents/project/myfile.xml");
XmlNode titleNode = xmlDoc.SelectSingleNode("//header");
using (StreamWriter outputFile = new StreamWriter("C:/Users/myuser/Documents/project/WriteLines.txt"))
{
if (titleNode != null)
Console.WriteLine(titleNode.InnerText.ToString());
outputFile.WriteLine(titleNode.InnerText);
}
Console.ReadKey();
}
}
我的xml文件如下所示
<header version="2.0">
<phone>1234567</phone>
<houseNumber>45</houseNumber>
<date>2015-09-19</date>
<deliveryId>12345696015</deliveryId>
</header>
有什么方法可以读取孩子并将其写入excel文件吗?
答案 0 :(得分:0)
希望此代码对您有帮助。 {
DataTable dt = new System.Data.DataTable();
dt.TableName = "Details";
dt.Columns.Add("phone", typeof(string));
dt.Columns.Add("houseNumber", typeof(string));
dt.Columns.Add("date", typeof(string));
dt.Columns.Add("deliveryId", typeof(string));
dt.Rows.Add("1234567", "45","2015-09-19","KV12_3896096015");
//Create Temp directory to save xml file
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(tempDir);
string path = Path.Combine(tempDir, string.Format("{0}.{1}", "Prodcuts", "xml"));
//Write to xml file
dt.WriteXml(path, System.Data.XmlWriteMode.IgnoreSchema);
//Create HttpClient and MultipartFormDataContent
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
using (var fromFile=File.OpenRead(path))
{
formData.Add(new StringContent("Test"), "FileName");
formData.Add(new StringContent("xlsx"), "FileFormat");
formData.Add(new StreamContent(fromFile), "DataFile",Path.GetFileName(path));
//Call WebAPI
var response = client.PostAsync(webapiURL, formData).Result;
if (!response.IsSuccessStatusCode)
{
MessageBox.Show("Invalid response.");
return;
}
var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
if (!Directory.Exists(tempPath))
{
Directory.CreateDirectory(tempPath);
}
//Save Excel file to Temp directory
}
答案 1 :(得分:0)
使用XPath在文档中找到<header>
元素已经做得很好。要从单个子节点提取信息,只需使用ChildNodes
的值LocalName
和InnerText
的{{1}}属性对XmlNode
集合进行迭代,即可得到如下输出:
foreach (XmlNode xmlNode in xmlDoc.SelectSingleNode("//header").ChildNodes)
{
Console.WriteLine(xmlNode.LocalName + ", " + xmlNode.InnerText);
}
请注意,//header
XPath与SelectSingleNode
组合会选择文档中任何位置的第一个<header>
元素。如果要选择文档的根节点,则应使用/header
,但是选择单个根节点可能不值得XPath查询。
我建议您选择一些third party package以产生特定格式的输出。如果您只需要简单的导出以进行进一步处理,则最简单的方法是生成CSV文件,您可以在MS Excel中轻松打开该文件:
using System.Linq;
// ...
var separator = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator;
var output = xmlDoc.SelectSingleNode("//header").ChildNodes.Cast<XmlNode>()
.Select(xmlNode => xmlNode.LocalName + separator + xmlNode.InnerText);
System.IO.File.WriteAllLines("output.csv", output);
请注意,这是一个非常简单的解决方案。适当的解决方案将在输出中包含一些escaping of values。