简体   繁体   中英

How to add XNamespace to XDocument's root element?

I'm generating Xml Documemnt via Linq To Xml. It is added 'xmlns' attribute to all elements with empty values. How to remove unwanted attributes?

XNamespace np = "example"; 

XDocument doc = new XDocument(
                    new XDeclaration("1.0", "UTF-8", string.Empty),
                        new XElement(np + "root")
                        );
var list = new List<string> { "1", "2", "3" };

foreach (var item in list)
{
  var xE = new XElement("child",
             new XElement("first", item),
             new XElement("second", item)
                        );
   doc.Root.AddFirst(xE);
}

I expect the result.

Only xmlns attribute in root element

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="example">
  <child>
    <first>3</first>
    <second>3</second>
  </child>
  <child >
    <first>2</first>
    <second>2</second>
  </child>
  <child>
    <first>1</first>
    <second>1</second>
  </child>
</root>

But getting

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="example">
  <child xmlns=""> //unwanted attribute

    <first>3</first>
    <second>3</second>
  </child>
  <child xmlns="">
    <first>2</first>
    <second>2</second>
  </child>
  <child xmlns="">
    <first>1</first>
    <second>1</second>
  </child>
</root

It needs to add XNamespace to every XElement.


XDocument doc = new XDocument(
                   new XDeclaration("1.0", "UTF-8", string.Empty),
                       new XElement(np + "root")
                   );
var list = new List<string> { "1", "2", "3" };

foreach (var item in list)
{
 var xE = new XElement(np+"child",
            new XElement(np+"first", item),
            new XElement(np+"second", item)
                       );
  doc.Root.AddFirst(xE);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM