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)
)
)
);