如何在每个 xml 节点中放置值

本文关键字:节点 xml | 更新日期: 2023-09-27 18:18:08

我用 C# 通过这段代码生成了 xmldocument,

  protected XDocument generateXML()
    {
        XDocument xdoc = new XDocument(
 new XDeclaration("1.0", "utf-8", "yes"),
     new XElement("Invoices",
         new XElement("Invoice",
             new XElement("InvoiceNumber", "s10838652")
         .......
 return xdoc;

}

在另一种方法中,我有:

    public override void RunWintrackConnector()
    {
        XDocument xml = generateXML();

.....

然后我想将数据放在每个XML节点中:(而不是我想分配的s10838652(字符串。Concat(bill.invoice, bill.num(;)到"发票编号"节点。

我有正确的部分,但不确定如何访问 xml 的每个节点:

xmlnode(for example InvoiceNumber) =  Win2.IntegrationXML.XMLMisc.DirtyData.getStringValue(string.Concat(bill.invoice, bill.num)); 

如何在每个 xml 节点中放置值

xml
    .Elements("Invoices")
    .Elements("Invoice")
    .Elements("InvoiceNumber")
    .First()
    .Value = string.Concat(bill.invoice, bill.num);

编辑 - 查看所有发票:

foreach(var invoice in xml.Elements("Invoices").Elements("Invoice"))
{
    invoice.Element("InvoiceNumber").Value = "asdf";
}

如果您熟悉 XPath,这相当于选择带有"发票/发票"的所有发票。

您可以使用

XElementXDocument来编写所需的值。

var valueToInsert = Win2.IntegrationXML.XMLMisc.DirtyData
    .getStringValue(string.Concat(bill.invoice, bill.num));
XDocument xml = generateXML();
xml.Element("Invoices")
    .Elements("Invoice").First() //this First is just an example
    .Element("InvoiceNumber")
    .Value = valueToInsert;

Element() 返回找到的第一个子节点,Elements()获取具有该节点名称的所有子节点的列表。找出节点嵌套的模式,您应该已经准备好了。

作为旁注,您可以使用XDocument变量执行上述操作,但我更喜欢将所有内容保留为XElement以增加 Linq 兼容性。