我有静态方法CreateXml,可在其中创建xml文档。我得到节点的值,然后我想将此值添加到列表。我的第一次追加工作正常,但第二次追加无效。如何修复,也许您知道如何清除代码? screen here
private static void CreateXml(DataReader reader)
{
var tempServerDir = Path.Combine(tempExportDirectory, Text.GetRandomString() + ".xml");
XmlDocument xml=new XmlDocument();
/// <summary>
///Create Head xml element
/// </summary>
xml.CreateElement("Head");
var uniqueIdentifier = xml.CreateElement("Unique_identifier");
var documentDate = xml.CreateElement("Document_date");
var documentNumber = xml.CreateElement("Document_number");
var documentName = xml.CreateElement("Document_name");
var vehicleId = xml.CreateElement("Vehicle_id");
var company = xml.CreateAttribute("Company");
var driverId = xml.CreateAttribute("Driver_id");
var contractId=xml.CreateAttribute("Contract_id");
/// <summary>
///get value of node
/// </summary>
uniqueIdentifier.InnerText = Text.Convert(reader.GetFieldValue<int>("uniqueIdentifier"));
documentDate.InnerText = Text.Convert(reader.GetFieldValue<DateTime>("documentDate"));
documentNumber.InnerText = reader.GetFieldValue<string>("documentNumber");
documentName.InnerText = "NDMTtest";
//documentName.InnerText = reader.GetFieldValue<string>("documentName");
vehicleId.InnerText = Text.Convert(reader.GetFieldValue<int>("vehicleId"));
company.InnerText = Text.Convert(reader.GetFieldValue<int>("company"));
driverId.InnerText = Text.Convert(reader.GetFieldValue<int>("driverId"));
contractId.InnerText = reader.GetFieldValue<string>("contractId");
/// <summary>
///add values to list
/// </summary>
xml.AppendChild(uniqueIdentifier);
//xml.AppendChild(documentDate);
//xml.AppendChild(documentNumber);
//xml.AppendChild(documentName);
//xml.AppendChild(vehicleId);
//xml.AppendChild(driverId);
//xml.AppendChild(company);
//xml.AppendChild(contractId);
/// <summary>
///Create Order xml element
/// </summary>
xml.CreateElement("Order");
var testOrder = xml.CreateAttribute("NPP");
testOrder.InnerText = "TestString";
xml.AppendChild(testOrder);
InfoManager.MessageBox("tempServerDir4:{0}", tempServerDir);
/// <summary>
/// Save and send file to client from temp directory
/// </summary>
//xml.Save(Console.Out);
xml.Save(tempServerDir);
//FileManager.SendFile(tempServerDir);
InfoManager.MessageBox(FileManager.SendFile(tempServerDir));
}
答案 0 :(得分:3)
OR 3 - title3 - content3 - 2019-02-05 19:14:43
OR 3 - content3 - 2019-02-05 19:14:43 (doesn't matter)
4 - title4 - content4 - 2019-02-05 19:14:44
5 - title5 - content5 - 2019-02-05 19:14:45
4 - content4 - 2019-02-05 19:14:44
5 - content5 - 2019-02-05 19:14:45
是xml
,代表XML文档。一个XML文档只能有一个根元素,因此不能添加多个根元素。这很可能就是您注释的代码“不起作用”的原因。
我怀疑您想将这些元素添加到开始创建的XmlDocument
元素中。因此,您的代码经过简化:
Head
有关有效的演示,请参见this fiddle。
但是,我强烈建议您考虑使用更新的LINQ to XML API,因为它们更容易使用。上面相同的代码可以写成如下:
var xml = new XmlDocument();
var head = xml.CreateElement("Head");
var uniqueIdentifier = xml.CreateElement("Unique_identifier");
var documentDate = xml.CreateElement("Document_date");
var documentNumber = xml.CreateElement("Document_number");
uniqueIdentifier.InnerText = "1";
documentDate.InnerText = "2019-01-01";
documentNumber.InnerText = "2";
xml.AppendChild(head);
head.AppendChild(uniqueIdentifier);
head.AppendChild(documentDate);
head.AppendChild(documentNumber);
有关其他演示,请参见this fiddle。
两个结果都如下所示:
var doc = new XDocument(
new XElement("Head",
new XElement("Unique_identifier", "1"),
new XElement("Document_date", "2019-01-01"),
new XElement("Document_number", "2")
)
);
答案 1 :(得分:1)
问题是您使用的库方法有误,一种可行的方法是使用DocumentElement
方法来填充Load
,然后将子代添加到该库中,以下代码应该可以工作:
xml.Load(new StringReader("<root></root>"));
/// <summary>
///add values to list
/// </summary>
xml.DocumentElement.AppendChild(uniqueIdentifier);
xml.DocumentElement.AppendChild(documentDate);
xml.DocumentElement.AppendChild(documentNumber);
xml.DocumentElement.AppendChild(documentName);
xml.DocumentElement.AppendChild(vehicleId);
//add attributes
xml.DocumentElement.Attributes.Append(driverId);
xml.DocumentElement.Attributes.Append(company);
xml.DocumentElement.Attributes.Append(contractId);
xml.Save(Console.Out);
//output
//<root Driver_id="driverId" Company="company" Contract_id="contractId">
//<Unique_identifier>uniqueIdentifier</Unique_identifier>
//<Document_date>documentDate</Document_date>
//<Document_number>documentNumber</Document_number>
//<Document_name>NDMTtest</Document_name>
//<Vehicle_id>vehicleId</Vehicle_id>
//</root>
还请注意,属性有不同的添加方式来检查更新的代码。
检查MSDN加密。