Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我的xml有两个相同的节点,如何在现有xml文件中添加xml文本_C#_Xml_Xml Namespaces - Fatal编程技术网

C# 如果我的xml有两个相同的节点,如何在现有xml文件中添加xml文本

C# 如果我的xml有两个相同的节点,如何在现有xml文件中添加xml文本,c#,xml,xml-namespaces,C#,Xml,Xml Namespaces,我有以下xml文件: <?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>

我有以下xml文件:

<?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>text</CommandText>
    </Query>
    </DataSet>
    <DataSet Name="table22">
    <Query>
    <DataSourceName>DS1</DataSourceName>
    <CommandText>New text2</CommandText>
    </Query>

DS1
文本
DS1
新文本2
在使用Xelement和XAttribute结束第一个“Query”元素之后,我必须添加以下xml文本 我要添加的第一个xml文本是:

   <Field Name="CommunicationDataValueId">
    <DataField>CommunicationDataValueId</DataField>
    <TypeName>System.Int64</TypeName>
    </Field>
    <Field Name="DeviceMasterId">
    <DataField>DeviceMasterId</DataField>
    <TypeName>System.Int32</TypeName>
    </Field>

通信数据值ID
System.Int64
DeviceMasterId
System.Int32
在第二个查询元素结束后要添加的第二个xml文本:

 <Field Name="Min">
          <DataField>Min</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="Max">
          <DataField>Max</DataField>
          <rd:TypeName>System.Int64</rd:TypeName>
        </Field>

分钟
系统字符串
马克斯
System.Int64
怎么做

预期产出应为:

    <?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>text</CommandText>
            </Query>
      <Field Name="CommunicationDataValueId">
            <DataField>CommunicationDataValueId</DataField>
            <TypeName>System.Int64</TypeName>
            </Field>
            <Field Name="DeviceMasterId">
            <DataField>DeviceMasterId</DataField>
            <TypeName>System.Int32</TypeName>
            </Field>
            </DataSet>
            <DataSet Name="table22">
            <Query>
            <DataSourceName>DS1</DataSourceName>
            <CommandText>New text2</CommandText>
            </Query>
      <Field Name="Min">
              <DataField>Min</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="Max">
              <DataField>Max</DataField>
              <rd:TypeName>System.Int64</rd:TypeName>
            </Field>

DS1
文本
通信数据值ID
System.Int64
DeviceMasterId
System.Int32
DS1
新文本2
分钟
系统字符串
马克斯
System.Int64

有人能帮我解决这个问题吗

查看以下API for-
AddAfterSelf

您可以找到每个相关的
查询
元素并调用该方法,添加要添加的XML。

使用XDocument

 var doc = XDocument.Parse("your xml string");
   //namespace
   var nspace = doc.Root.Name.Namespace;
    foreach (var item in doc.Descendants(nspace+"DataSet"))
    {

        var str = new StringBuilder();
        var str1 = new StringBuilder();
        str.Append("<Field Name='CommunicationDataValueId'>");
        str.Append("<DataField>CommunicationDataValueId</DataField>");
        str.Append("<TypeName>System.Int64</TypeName>");
        str.Append("</Field>");
        str1.Append("<Field Name='DeviceMasterId'>");
        str1.Append("<DataField>DeviceMasterId</DataField>");
        str1.Append("<TypeName>System.Int32</TypeName>");
        str1.Append("</Field>");
        item.Add(XElement.Parse(str.ToString()));
        item.Add(XElement.Parse(str1.ToString()));
    }
var doc=XDocument.Parse(“您的xml字符串”);
//名称空间
var nspace=doc.Root.Name.Namespace;
foreach(文档子体(nspace+“数据集”)中的变量项)
{
var str=新的StringBuilder();
var str1=新的StringBuilder();
str.Append(“”);
str.Append(“CommunicationDataValueId”);
str.Append(“System.Int64”);
str.Append(“”);
str1.追加(“”);
str1.追加(“DeviceMasterId”);
str1.Append(“System.Int32”);
str1.追加(“”);
Add(XElement.Parse(str.ToString());
Add(XElement.Parse(str1.ToString());
}

不,它不起作用..我面临问题,因为xml文件有重复的元素如何访问第二个数据集节点元素我没有得到错误,bt每次我的文本被添加到第一个数据集节点而不是第二个节点时,你必须添加你正在使用的代码,以便我们能够理解这一点。我已经更新了我的问题,请看一看你能分享预期的xml输出吗你能告诉我如何访问第二个节点吗,因为它是重复的我不知道如何获取it@DeepakSaralaya我已经更新了我的问题,请有一个look@DeepakSaralaya我这里有xml文件的输出…实际上,我必须在每个数据集节点上为我做最后的工作,查询后,它的附件不使用名称APCE..我不想从我的xml文件中删除名称空间我已经更新了我的问题,实际上这是我想要实现的目标,错误地,我在此之前上传了错误的一个