Как добавить атрибуты в XML с помощью XmlDocument в c # .net CF 3.5 - PullRequest
13 голосов
/ 04 августа 2010

Мне нужно создать атрибут «abc» с префиксом «xx» для элемента «aaa». Следующий код добавляет префикс, но также добавляет namespaceUri к элементу.

Требуемый вывод:

<mybody>
<aaa xx:abc="ddd"/>
<mybody/>

Мой код:

  XmlNode node = doc.SelectSingleNode("//mybody");
  XmlElement ele = doc.CreateElement("aaa");

  XmlAttribute newAttribute = doc.CreateAttribute("xx","abc",namespace);              
  newAttribute.Value = "ddd";

  ele.Attributes.Append(newAttribute);

  node.InsertBefore(ele, node.LastChild);

Приведенный выше код генерирует:

<mybody>
<aaa xx:abc="ddd" xmlns:xx="http://www.w3.org/1999/XSL/Transform"/>
<mybody/>

Желаемый вывод

<mybody>
<aaa xx:abc="ddd"/>
<mybody/>

И объявление атрибута "xx" должно быть сделано в корневом узле как:

<ns:somexml xx:xsi="http://www.w3.org/1999/XSL/Transform"  xmlns:ns="http://x.y.z.com/Protocol/v1.0">

Как можно получить выходные данные в формате deisred? Если xml находится не в этом желаемом формате, он больше не может быть обработан ..

Может кто-нибудь помочь?

Спасибо, Vicky

1 Ответ

35 голосов
/ 04 августа 2010

Я полагаю, что это просто вопрос установки соответствующего атрибута непосредственно в корневом узле. Вот пример программы:

using System;
using System.Globalization;
using System.Xml;

class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("root");

        string ns = "http://sample/namespace";
        XmlAttribute nsAttribute = doc.CreateAttribute("xmlns", "xx",
            "http://www.w3.org/2000/xmlns/");
        nsAttribute.Value = ns;
        root.Attributes.Append(nsAttribute);

        doc.AppendChild(root);
        XmlElement child = doc.CreateElement("child");
        root.AppendChild(child);
        XmlAttribute newAttribute = doc.CreateAttribute("xx","abc", ns);
        newAttribute.Value = "ddd";        
        child.Attributes.Append(newAttribute);

        doc.Save(Console.Out);
    }
}

Выход:

<?xml version="1.0" encoding="ibm850"?>
<root xmlns:xx="http://sample/namespace">
  <child xx:abc="ddd" />
</root>
...