url="jdbc:postgresql//localhost:5432/mmas"
Этот URL-адрес выглядит неправильно, вам нужно следующее:
url="jdbc:postgresql://localhost:5432/mmas"
Нет никакой потребности повторно проанализировать. Один из конструкторов XElement берет другой XElement и делает глубокую копию из него:
XElement original = new XElement("original");
XElement deepCopy = new XElement(original);
Вот несколько модульных тестов для демонстрации:
[TestMethod]
public void XElementShallowCopyShouldOnlyCopyReference()
{
XElement original = new XElement("original");
XElement shallowCopy = original;
shallowCopy.Name = "copy";
Assert.AreEqual("copy", original.Name);
}
[TestMethod]
public void ShouldGetXElementDeepCopyUsingConstructorArgument()
{
XElement original = new XElement("original");
XElement deepCopy = new XElement(original);
deepCopy.Name = "copy";
Assert.AreEqual("original", original.Name);
Assert.AreEqual("copy", deepCopy.Name);
}
Это похоже на ToString, и метод пересинтаксического анализа является лучшим способом. Вот код:
XElement copy = XElement.Parse(original.ToString());
Я не полагаю, что существует существующий механизм, который позволяет, Вы для выполнения глубокой копии XNode разрабатываете дерево. Я думаю, что Вас оставляют с двумя опциями.
, шаблон "посетитель", конечно, возможен, но потребуется большая работа тестирование. Я думаю, что Вашим наилучшим вариантом является № 1.
Снятый непосредственно от C# 3.0 вкратце :
, Когда узел или атрибут добавляются к элементу (ли через функциональную конструкцию или Добавить метод) узел или свойство Parent атрибута установлены на тот элемент. Узел может иметь только один родительский элемент: если Вы добавляете уже порожденный узел к второму родителю, узел автоматически глубоко клонирован. В следующем примере у каждого клиента есть отдельная копия адреса:
var address = new XElement ("address",
new XElement ("street", "Lawley St"),
new XElement ("town", "North Beach")
);
var customer1 = new XElement ("customer1", address);
var customer2 = new XElement ("customer2", address);
customer1.Element ("address").Element ("street").Value = "Another St";
Console.WriteLine (
customer2.Element ("address").Element ("street").Value); // Lawley St
Это автоматическое дублирование сохраняет инстанцирование X-объекта-DOM свободным от стороны effects— другой признак функционального программирования.