我在编辑现有xml文件时遇到问题。我一直在寻找解决方案,但找不到所需的解决方案。有人可以帮我吗?
这是我的代码:
print
这是代码的结果: https://pastebin.com/LKGJER38
但是我需要这个: https://pastebin.com/RRC75pR8
我将不胜感激。
答案 0 :(得分:0)
改为添加到Items元素:
private void referenceToXML(string path)
{
var xmlDoc = XDocument.Load(path);
xmlDoc.Element("ItemCollection").Element("Items").Add(
new XElement("Item", new XAttribute("name", question.text), SM.text));
xmlDoc.Save(path);
}
答案 1 :(得分:0)
您的问题是,每次添加<Items>
元素时,您都无条件添加了<Item>
元素。相反,您需要检查是否存在此类元素,如果存在,请使用它。以下extension method可以轻松实现:
public static partial class XNodeExtensions
{
public static XElement GetOrAddElement(this XContainer container, XName name)
{
if (container == null || name == null)
throw new ArgumentNullException();
var element = container.Element(name);
if (element == null)
container.Add(element = new XElement(name));
return element;
}
}
现在,您可以修改referenceToXML
方法以使用它,如下所示:
private static void referenceToXML(string path, string questionText, string smText)
{
AddItem(XDocument.Load(path), questionText, smText).Save(path);
}
static XDocument AddItem(XDocument doc, string questionText, string smText)
{
var firstNameElement = new XElement("Item");
firstNameElement.SetAttributeValue("name", questionText);
var lastNameElement = new XElement("Cathegory", smText);
firstNameElement.Add(lastNameElement);
// Get or create the root element ItemCollection
var root = doc.GetOrAddElement("ItemCollection");
// Get or create the Items list
var items = root.GetOrAddElement("Items");
// Add the item
items.Add(firstNameElement);
return doc;
}
演示小提琴here。
请注意,为了清楚起见和测试目的,我修改了您的代码以使用question.text
和SM.text
参数而不是类成员。