XNamespace в C#

Я строю XML с использованием XDocument. это мой код

        var ns = XNamespace.Get("url");        
    XDocument requestXMl = new XDocument(
        new XElement(ns+"WEB_REQUEST",
            new XElement("HTTP_HEADER_INFORMATION",
                new XElement("DEFINED_HEADERS",
                    new XElement("HTTP_DEFINED_REQUEST_HEADER",
                            new XElement("ItemNameType", "RequestDate"),
                            new XElement("ItemValue", _currentTime)
                                ),
                        new XElement("HTTP_DEFINED_REQUEST_HEADER",
                            new XElement("ItemNameType", "AuthorizationValue"),
                            new XElement("ItemValue", credentials)
                                )
                              )
                           ),
            new XElement("COLL",
                new XElement("TID", _t),
                new XElement("SID", _s)
                        )
                    )
            );

вывод для этого кода

  <WEB_REQUEST xmlns="url">
  <HTTP_HEADER_INFORMATION xmlns="">
    <DEFINED_HEADERS>
      <HTTP_DEFINED_REQUEST_HEADER>
        <ItemNameType>RequestDate</ItemNameType>
        <ItemValue>Wed,06 May 2015 18:14:33 GMT</ItemValue>
      </HTTP_DEFINED_REQUEST_HEADER>
      <HTTP_DEFINED_REQUEST_HEADER>
        <ItemNameType>AuthorizationValue</ItemNameType>
        <ItemValue>ieuKB5voR3w==</ItemValue>
      </HTTP_DEFINED_REQUEST_HEADER>
    </DEFINED_HEADERS>
  </HTTP_HEADER_INFORMATION>
  <COLL xmlns="">
    <TID></TID>
    <SID></SID>
  </COLL>
</WEB_REQUEST>

Я не хочу, чтобы xmlns появлялся 3 раза, как он появляется в выводе. Я хочу, чтобы это появилось только 2 раза.

<WEB_REQUEST xmlns="url"> 
  <COLLABORATION xmlns="">

Как я могу достичь этого?

1 ответ

Решение

Укажите пространство имен "url" для элемента, для которого вы не хотите иметь пустой xmlns. Это очищает все пространства имен xml, кроме корневого элемента:

var ns = XNamespace.Get("url");        
XDocument requestXMl = new XDocument(
    new XElement(ns+"WEB_REQUEST",
        new XElement(ns+"HTTP_HEADER_INFORMATION",
            new XElement(ns+"DEFINED_HEADERS",
                new XElement(ns+"HTTP_DEFINED_REQUEST_HEADER",
                        new XElement(ns+"ItemNameType", "RequestDate"),
                        new XElement(ns+"ItemValue", _currentTime)
                            ),
                    new XElement(ns+"HTTP_DEFINED_REQUEST_HEADER",
                        new XElement(ns+"ItemNameType", "AuthorizationValue"),
                        new XElement(ns+"ItemValue", credentials)
                            )
                          )
                       ),
        new XElement(ns + "COLL",
            new XElement(ns + "TID", _t),
            new XElement(ns + "SID", _s)
                    )
                )
        );
Другие вопросы по тегам