我有一个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>
我尝试选择单个节点并克隆它们,然后将克隆附加到父节点并删除不再需要的子节点。它变得非常漫长而令人费解,我无法让它发挥作用。必须有一个我不了解的更优雅的解决方案。
任何帮助表示赞赏。
感谢。
答案 0 :(得分:0)
以下是添加新根元素的示例:
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);
}
}
尝试使用相同的方法“删除”原始中的userBooks
元素 - 从父项中删除元素,然后将所有子节点(userBooks
)添加为新的子节点userBooks
的原始父母。
答案 1 :(得分:0)
使用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"));
}
}
}
}