XDocument/XElement/XAttribute: Как создать документ с пространствами имен, создав неприсоединенные элементы?C#

Место общения программистов C#
Ответить
Anonymous
 XDocument/XElement/XAttribute: Как создать документ с пространствами имен, создав неприсоединенные элементы?

Сообщение Anonymous »

Я создаю дерево DOM, сначала создавая объекты XElement и XAttribute, а затем добавляя их в XDocument.
Как стал бы я делать это, если задействованы XNamespace?
Вот простой код MRE, имитирующий мой (здесь важен метод CreateTree()). Другой код просто добавлен для пояснение):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace XamlTest
{
internal class Program
{
private static readonly Dictionary XamlNamespaces = new Dictionary()
{
{ "xmlns", "http://schemas.microsoft.com/winfx/2006 ... esentation" },
{ "xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml" }
};

private static readonly Dictionary _ns = XamlNamespaces.Select(ns => new { Key = ns.Key.Length < 6 ? "" : ns.Key[6..], Value = (XNamespace)ns.Value }).ToDictionary(ns => ns.Key, ns => ns.Value);

internal static void Main()
{
CreateDocument();

Console.ReadKey();
}

public static void CreateDocument()
{
XElement root = new XElement(_ns[""] + "Section");

foreach (KeyValuePair ns in _ns)
root.Add(new XAttribute(ns.Key.Length == 0 ? "xmlns" : XNamespace.Xmlns + ns.Key, ns.Value));

XDocument xamlDoc = new XDocument(root);
root.Add(CreateTree());

Console.WriteLine(xamlDoc.ToString());
}

private static List CreateTree()
{
List newElements = [];

newElements.Add(new XElement(_ns[""] + "Paragraph",
new XAttribute(_ns[""] + "FontSize", "12")
));

return newElements;
}
}
}
< /code>
Результат: < /p>




Этого не ожидается. Ожидается что-то вроде этого:





Подробнее здесь: https://stackoverflow.com/questions/793 ... ces-by-cre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»