我有静态方法 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));
}
最佳答案
xml
是一个 XmlDocument
,它表示 XML 文档。 XML 文档只能有一个根元素,因此不可能添加多个根元素。这很可能就是您的注释代码“不起作用”的原因。
我怀疑您想将这些元素添加到您在开始时创建的 Head
元素中。所以你的代码的简化版本:
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一个工作演示。
但是,我强烈建议您考虑使用较新的 LINQ to XML API,因为它们更容易使用。上面相同的代码可以写成如下:
var doc = new XDocument(
new XElement("Head",
new XElement("Unique_identifier", "1"),
new XElement("Document_date", "2019-01-01"),
new XElement("Document_number", "2")
)
);
参见this fiddle另一个演示。
两者都会产生如下所示的 XML:
<Head>
<Unique_identifier>1</Unique_identifier>
<Document_date>2019-01-01</Document_date>
<Document_number>2</Document_number>
</Head>
关于c# - 附加XML字符串 block 保存文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54554950/