gpt4 book ai didi

c# - 附加 XML 字符串 block 保存文档

转载 作者:数据小太阳 更新时间:2023-10-29 03:00:01 25 4
gpt4 key购买 nike

我有创建 xml 文档的静态方法 CreateXml。我得到节点的值,然后我想将这个值添加到列表中。我的第一个追加工作正常,但第二个追加不起作用。它是如何修复的,也许你知道它的代码是如何清晰的? 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com