Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 使用linq to xml交换xml文件中的两个元素及其子元素_C#_Xml_Linq To Xml - Fatal编程技术网

C# 使用linq to xml交换xml文件中的两个元素及其子元素

C# 使用linq to xml交换xml文件中的两个元素及其子元素,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有一个xml文件,需要交换它的几个标记。 例如:在下面的示例中,我想交换元素(B和C及其子元素)并将其更新回相同的xml <A> <B> <xxx> <zzz> . </B> <C> <nnn> <mmm> . </C> </A> . . 所以最后应该是下面这样 <A&

我有一个xml文件,需要交换它的几个标记。 例如:在下面的示例中,我想交换元素(B和C及其子元素)并将其更新回相同的xml

<A>
   <B>
      <xxx>
      <zzz>
      .
   </B>
   <C>
      <nnn>
      <mmm>
      .
   </C>
</A>

.
.
所以最后应该是下面这样

<A>
   <C>
      <nnn>
      <mmm>
      .
   </C>
   <B>
      <xxx>
      <zzz>
      .
   </B>
</A>

.
.

在阅读+解析+保存xml方面有什么帮助吗?

很抱歉使用VB。创建测试XML的代码将不同,但是在C之后移动A的代码应该是关闭的

        Dim xe As XElement
        ' to load from a file - similar to C#
        ' Dim yourpath As String = "your path here"
        'xe = XElement.Load(yourpath)

        ' for testing
        xe = <A>
                 <B>
                     <xxx></xxx>
                     <zzz></zzz>
      b stuff
   </B>
                 <C>
                     <nnn></nnn>
                     <mmm></mmm>
      c stuff
   </C>
             </A>


        'this should be close to what the C# will look like
        Dim holdB As XElement = New XElement(xe.<B>.FirstOrDefault) 'create copy of the B element
        xe.<B>.Remove() 'remove B

        xe.<C>.FirstOrDefault.AddAfterSelf(holdB) 'add after C

        ' to save file - similar to C#
        ' xe.Save(yourpath)

可能重复Don think@FortyTwo-在我的xml文件中,所有标记都是不同的和不相关的(A-是根元素,(B,C)-它的子元素和B.C有自己的子元素。而且我的xml中还有更多的标记,所以代码需要找到“A”首先,只对其进行操作。逻辑是一样的。找到XmlNode并将其插入正确的XmlElement之后。感谢您的代码。有没有方法可以共享C代码?@ghatwala-通过转换器运行重要部分并将其发布。我不是C代码,所以我不知道代码是否有效或正确。
XElement xe = default(XElement);
// to load from a file - similar to C#
string yourpath = "your path here";
xe = XElement.Load(yourpath);

XElement holdB = new XElement(xe.FirstOrDefault);
//create copy of the B element
xe.Remove();
//remove B

xe.FirstOrDefault.AddAfterSelf(holdB);
//add after C

// to save file - similar to C#
xe.Save(yourpath);

//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Twitter: @telerik
//Facebook: facebook.com/telerik
//=======================================================