XmlDocument 重新排列 XmlNodes C#
XmlDocument rearrange XmlNodes C#
我有一个 XML 文档,用于存储有关系统用户的各种信息。最终,我感兴趣的节点在下面列出。
所以,有一个用户有很多用户内容 - 我仅以书籍为例。
<?xml version="1.0" encoding="UTF-8"?>
<user>
<userProperties>
<alias val="userAliasOne"/>
<id val="3423423"/>
</userProperties>
<userContent>
<userBooks>
<genre>
<book>
<title>Dummy Value</title>
</book>
</genre>
</userBooks>
</userContent>
</user>
我需要以某种方式重组 XML,使用 XmlDocument 和 XmlNode,使其与下面的匹配。 (userBooks 成为根节点,但 userBooks 的所有内容 - /genre/book/title - 保留在 userContent 中)。
<?xml version="1.0" encoding="UTF-8"?>
<userBooks>
<user>
<userProperties>
<alias val="userAliasOne"/>
<id val="3423423"/>
</userProperties>
<userContent>
<genre>
<book>
<title>Dummy Value</title>
</book>
</genre>
</userContent>
</user>
</userBooks>
我试过选择单个节点并克隆它们,然后将克隆附加到父节点并删除不再需要的子节点。它变得很长很复杂,我无法让它工作。一定有我不知道的更优雅的解决方案。
感谢任何帮助。
谢谢。
下面是添加新根元素的示例:
using System;
using System.Xml;
class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
var originalRoot = doc.DocumentElement;
doc.RemoveChild(originalRoot);
var newRoot = doc.CreateElement("userBooks");
doc.AppendChild(newRoot);
newRoot.AppendChild(originalRoot);
doc.Save(Console.Out);
}
}
尝试对 "removing" 原始 userBooks
元素使用相同的方法 - 从其父元素中删除该元素,然后添加所有子节点(userBooks
)作为userBooks
.
原始父节点的新子节点
使用 XML Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> userBooks = doc.Descendants("userBooks").ToList();
foreach(XElement userBook in userBooks)
{
userBook.ReplaceWith(userBook.Element("genre"));
}
}
}
}
我有一个 XML 文档,用于存储有关系统用户的各种信息。最终,我感兴趣的节点在下面列出。
所以,有一个用户有很多用户内容 - 我仅以书籍为例。
<?xml version="1.0" encoding="UTF-8"?>
<user>
<userProperties>
<alias val="userAliasOne"/>
<id val="3423423"/>
</userProperties>
<userContent>
<userBooks>
<genre>
<book>
<title>Dummy Value</title>
</book>
</genre>
</userBooks>
</userContent>
</user>
我需要以某种方式重组 XML,使用 XmlDocument 和 XmlNode,使其与下面的匹配。 (userBooks 成为根节点,但 userBooks 的所有内容 - /genre/book/title - 保留在 userContent 中)。
<?xml version="1.0" encoding="UTF-8"?>
<userBooks>
<user>
<userProperties>
<alias val="userAliasOne"/>
<id val="3423423"/>
</userProperties>
<userContent>
<genre>
<book>
<title>Dummy Value</title>
</book>
</genre>
</userContent>
</user>
</userBooks>
我试过选择单个节点并克隆它们,然后将克隆附加到父节点并删除不再需要的子节点。它变得很长很复杂,我无法让它工作。一定有我不知道的更优雅的解决方案。
感谢任何帮助。
谢谢。
下面是添加新根元素的示例:
using System;
using System.Xml;
class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
var originalRoot = doc.DocumentElement;
doc.RemoveChild(originalRoot);
var newRoot = doc.CreateElement("userBooks");
doc.AppendChild(newRoot);
newRoot.AppendChild(originalRoot);
doc.Save(Console.Out);
}
}
尝试对 "removing" 原始 userBooks
元素使用相同的方法 - 从其父元素中删除该元素,然后添加所有子节点(userBooks
)作为userBooks
.
使用 XML Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> userBooks = doc.Descendants("userBooks").ToList();
foreach(XElement userBook in userBooks)
{
userBook.ReplaceWith(userBook.Element("genre"));
}
}
}
}