如何将子节点放入自己的父节点?
How do I put child nodes into their own parent node?
我有以下 XML 输入:
<init>
<options>
<option>1</option>
<option>2</option>
<option>3</option>
</options>
</init>
我想将其转换为以下输出 XML:
<init>
<options>
<option>1</option>
</options>
<options>
<option>2</option>
</options>
<options>
<option>3</option>
</options>
</init>
所以我想根据输入 XML.
中子节点的数量创建多个 <options>
标签,而不是一个 <options>
标签
我在 C# .NET 中使用 XmlDocument。
最简单的方法是什么?
假定您提供的格式完全正确
var xmlStr = @"<init>
<options>
<option>1</option>
<option>2</option>
<option>3</option>
</options>
</init>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);
var resultDoc = new XmlDocument();
resultDoc.LoadXml("<init></init>");
XmlElement elem;
foreach (XmlElement node in xmlDoc.FirstChild.FirstChild.ChildNodes)
{
elem = resultDoc.CreateElement("options");
resultDoc.FirstChild.AppendChild(elem);
elem = resultDoc.CreateElement("option");
elem.InnerText = node.InnerText;
resultDoc.FirstChild.LastChild.AppendChild(elem);
}
Console.WriteLine(resultDoc.InnerXml);
编辑:
您可以使用相同的文档并对元素重新排序,而不是创建新的 XmlDocument。我希望这就是你的意思。
xmlDoc.LoadXml(xmlStr);
xmlDoc.FirstChild.InnerXml = string.Join("",
xmlDoc.SelectNodes("//option")
.Cast<XmlNode>()
.Select(n => n.OuterXml));
XmlElement elem;
foreach (XmlElement node in xmlDoc.SelectNodes("//init//option"))
{
xmlDoc.FirstChild.RemoveChild(node);
elem = xmlDoc.CreateElement("options");
elem.AppendChild(node);
xmlDoc.FirstChild.AppendChild(elem);
}
我有以下 XML 输入:
<init>
<options>
<option>1</option>
<option>2</option>
<option>3</option>
</options>
</init>
我想将其转换为以下输出 XML:
<init>
<options>
<option>1</option>
</options>
<options>
<option>2</option>
</options>
<options>
<option>3</option>
</options>
</init>
所以我想根据输入 XML.
中子节点的数量创建多个<options>
标签,而不是一个 <options>
标签
我在 C# .NET 中使用 XmlDocument。
最简单的方法是什么?
假定您提供的格式完全正确
var xmlStr = @"<init>
<options>
<option>1</option>
<option>2</option>
<option>3</option>
</options>
</init>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);
var resultDoc = new XmlDocument();
resultDoc.LoadXml("<init></init>");
XmlElement elem;
foreach (XmlElement node in xmlDoc.FirstChild.FirstChild.ChildNodes)
{
elem = resultDoc.CreateElement("options");
resultDoc.FirstChild.AppendChild(elem);
elem = resultDoc.CreateElement("option");
elem.InnerText = node.InnerText;
resultDoc.FirstChild.LastChild.AppendChild(elem);
}
Console.WriteLine(resultDoc.InnerXml);
编辑: 您可以使用相同的文档并对元素重新排序,而不是创建新的 XmlDocument。我希望这就是你的意思。
xmlDoc.LoadXml(xmlStr);
xmlDoc.FirstChild.InnerXml = string.Join("",
xmlDoc.SelectNodes("//option")
.Cast<XmlNode>()
.Select(n => n.OuterXml));
XmlElement elem;
foreach (XmlElement node in xmlDoc.SelectNodes("//init//option"))
{
xmlDoc.FirstChild.RemoveChild(node);
elem = xmlDoc.CreateElement("options");
elem.AppendChild(node);
xmlDoc.FirstChild.AppendChild(elem);
}