简体   繁体   English

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

[英]How to append node and attribute to an existing Xml file

I have the following XML file. 我有以下XML文件。 I have to add a node using XElement and XAttribute . 我必须使用XElementXAttribute添加一个节点。 How to do this? 这个怎么做?

   <?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>

How to add following XML text to above xml file at the end of both "/query" element using XElement And XAttribute 如何使用XElementXAttribute在“ / query”元素的末尾将以下XML文本添加到上述xml文件中

 <Fields>
        <Field Name="ReportId">
          <DataField>ReportId</DataField>
          <rd:TypeName>System.Int64</rd:TypeName>
        </Field> 

You can try to select <Query> element first, then use AddAfterSelf() method to add <Fields> element after <Query> element, for example : 您可以尝试先选择<Query>元素,然后使用AddAfterSelf()方法在<Query>元素之后添加<Fields> <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());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM