如何删除xmlns=""属性添加到新创建的XElement节点
本文关键字:quot 创建 新创建 节点 XElement 属性 xmlns 删除 何删除 添加 | 更新日期: 2023-09-27 18:16:37
当我将新节点添加到定义了名称空间的节点的根中时,添加的后续节点都将接收附加到它们的xmlns="。这是显示我的问题的代码:
void Main()
{
var xdoc = new XDocument();
var shipmentRoot = new XElement("{someNS}Shipment");
var newElement = new XElement("ContainerCollection", new XElement("Container", new XElement("ContainerNumber", "42")));
newElement.SetAttributeValue("Content", "Partial");
shipmentRoot.Add(newElement);
xdoc.Add(shipmentRoot);
xdoc.Dump();
}
生成XML:
<Shipment xmlns="someNS">
<ContainerCollection Content="Partial" xmlns="">
<Container>
<ContainerNumber>42</ContainerNumber>
</Container>
</ContainerCollection>
</Shipment>
我想要的XML是:
<Shipment xmlns="someNS">
<ContainerCollection Content="Partial">
<Container>
<ContainerNumber>42</ContainerNumber>
</Container>
</ContainerCollection>
</Shipment>
虽然我怀疑这是一个副本,但我不容易找到它。问题是,在您想要的XML中,ContainerCollection
, Container
和ContainerNumber
元素在命名空间"someNS"
中,因为这是从它们的Shipment
祖先继承的默认值…但是您正在创建具有空名称空间的元素。修复方法是使用正确的名称空间创建它们:
// I prefer this over using {someNS}Shipment, personally. YMMV.
XNamespace ns = "someNS";
var shipmentRoot = new XElement(ns + "Shipment");
var newElement = new XElement(ns + "ContainerCollection",
new XElement(ns + "Container",
new XElement(ns + "ContainerNumber", "42")));
newElement.SetAttributeValue("Content", "Partial");