C# 如何将节点和属性附加到现有Xml文件

C# 如何将节点和属性附加到现有Xml文件,c#,xml,xml-namespaces,C#,Xml,Xml Namespaces,我有以下XML文件。我必须使用XElement和XAttribute添加一个节点。如何做到这一点 <?xml version="1.0" encoding="UTF-8"?> <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporti

我有以下XML文件。我必须使用
XElement
XAttribute
添加一个节点。如何做到这一点

   <?xml version="1.0" encoding="UTF-8"?>
    <Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"> 
       <DataSets>
          <DataSet Name="Data">
              <Query>
                  <DataSourceName>DS1</DataSourceName>
                  <CommandText>SELECT FirstName,LastName FROM Person</CommandText>
              </Query>
</DataSet>
    <DataSet Name="table22">
      <Query>
        <DataSourceName>DS1</DataSourceName>
        <CommandText>New text2</CommandText>
      </Query>

您可以尝试先选择
元素,然后使用方法在
元素之后添加
元素,例如:

var doc = XElement.Parse(xml);
XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition";
var query = doc.Element(ns + "DataSets").Element(ns + "DataSet").Element(ns + "Query");

Console.WriteLine("before :");
Console.WriteLine(doc.ToString());
Console.WriteLine("");

XNamespace rd = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
var field = new XElement(ns+"Fields",
                         new XElement(ns+"Field", new XAttribute("Name", "ReportId")
                                      , new XElement(ns+"DataField", "ReportId")
                                      , new XElement(rd + "TypeName", "System.Int64")));
query.AddAfterSelf(field);

Console.WriteLine("after :");
Console.WriteLine(doc.ToString());

我想添加System.Int64,我得到的bt我已经更新了我的问题…如果我的xml中有相同的节点,如何插入数据file@ha07如何在DataSet name=“table22”的后面添加xml文本在您的另一个问题中回答了这个问题。在旅途中更改/添加需求对我来说相当烦人。如果你发布了另一个关于变更/新要求的问题,最好通知链接,并根据原始要求关闭/继续上一篇文章中的讨论。我不知道如何关闭讨论,通知其他人我这边很容易
var doc = XElement.Parse(xml);
XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition";
var query = doc.Element(ns + "DataSets").Element(ns + "DataSet").Element(ns + "Query");

Console.WriteLine("before :");
Console.WriteLine(doc.ToString());
Console.WriteLine("");

XNamespace rd = "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
var field = new XElement(ns+"Fields",
                         new XElement(ns+"Field", new XAttribute("Name", "ReportId")
                                      , new XElement(ns+"DataField", "ReportId")
                                      , new XElement(rd + "TypeName", "System.Int64")));
query.AddAfterSelf(field);

Console.WriteLine("after :");
Console.WriteLine(doc.ToString());