如何删除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>

如何删除xmlns=""属性添加到新创建的XElement节点

虽然我怀疑这是一个副本,但我不容易找到它。问题是,在您想要的XML中,ContainerCollection, ContainerContainerNumber元素在命名空间"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");
相关文章: