XmlDocument Удалить XMLNS из корневого элемента - PullRequest
0 голосов
/ 14 июля 2011

Новое здесь, вам нужна небольшая помощь с моим XmlDocument.Возможно ли иметь строковые данные в моем корневом элементе И удалить атрибут xmlns = из отображаемого?Я ищу что-то вроде этого:

<Rulebase author=yadda datetime=bingbang version=1.x </Rulebase>

Когда я пытаюсь использовать мои строковые данные, выполняя:

xmlDom.AppendChild(xmlDom.CreateElement("", "Rulebase", data));
XmlElement xmlRoot = xmlDom.DocumentElement;

В итоге это выглядит так:

<Rulebase xmlns="version=0 author=username date=7/13/2011 </Rulebase>

и он также добавляет xmlns = "" ко всем другим моим узлам.

1 Ответ

2 голосов
/ 14 июля 2011

Используемая вами перегрузка CreateElement принимает префикс в качестве первого аргумента, локальное имя в качестве второго и пространство имен в качестве третьего. Если вам не нужно пространство имен, не используйте эту перегрузку. Просто используйте тот, который принимает локальное имя в качестве единственного аргумента. Затем добавьте ваши данные отдельно как дочерние элементы и атрибуты.

var xmlDom = new XmlDocument();
XmlElement root = xmlDom.CreateElement("Rulebase");
xmlDom.AppendChild(root);
XmlElement data = xmlDom.CreateElement("Data");
root.AppendChild(data);

XmlAttribute attribute = xmlDom.CreateAttribute("author");
attribute.Value = "username";
data.Attributes.Append(attribute);

attribute = xmlDom.CreateAttribute("date");
attribute.Value = XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.RoundtripKind);
data.Attributes.Append(attribute);

Console.WriteLine(xmlDom.OuterXml);

Создает (добавлено форматирование)

<Rulebase>
    <Data author="username" date="2011-07-13T22:44:27.5488853-04:00" />
</Rulebase>

Использование XmlDocument для генерации XML довольно утомительно. В .NET есть много лучших способов, таких как XmlSerializer и DataContractSerializer. Вы также можете использовать Linq-to-Xml и XElement. Или вы можете использовать XmlWriter.Create(). Много вариантов.

...