【问题标题】:Adding a new node as a child is automatically adding the xmlns attribute将新节点添加为子节点会自动添加 xmlns 属性
【发布时间】:2011-02-18 09:19:18
【问题描述】:

我正在尝试修改 XML 文档。 XML 的结构如下:

<?xml version='1.0' encoding='iso-8859-1'?>
 <Modelo39 xmlns="http://www.dgci.gov.pt/2002/OT" versao="1">
<Rosto>
<QuadroInicio />
<Quadro01>
  <Q01C01>555555555</Q01C01>
</Quadro01>
<Quadro06>
  <Rostoq06T>

  </Rostoq06T>
</Quadro06>
</Rosto>
</Modelo39>

我正在尝试向 Rostoq06T 添加一个新节点,如下所示:

<Rostoq06T-Linha numero="1">
<NIF>100000000</NIF>
<CodRend>01</CodRend>
<Rendimento>2500</Rendimento>
<Retido>500</Retido>
</Rostoq06T-Linha>

我正在创建一个名为 Rostoq06T-Linha 的新元素,并将其正确添加到节点 Rosto06T:

XmlElement node06T = xmlDoc.CreateElement("Rostoq06T-Linha");
node06T.SetAttribute("numero", linha.ToString());
//Here i add the elements to node06T
xmlDoc.DocumentElement.GetElementsByTagName("Rostoq06T").Item(0).AppendChild(node06T);

我的问题是 Rosto06T-Linha 是这样生成的:

<Rostoq06T-Linha numero="1" xmlns="">

如果此元素是 Rostoq06T 的子元素,我无法弄清楚为什么要向该节点添加属性 xmlns

谁能帮我解决这个问题?

【问题讨论】:

  • 嗨,我相信你应该在调用 xmlDoc.CreateElement 时指定你想要一个 XmlNode 作为节点类型,看看重载......

标签: c# xml xml-namespaces


【解决方案1】:

因为您创建了Rostoq06T-Linha 元素没有 命名空间,即。 空命名空间

您必须使用正确的CreateElement 重载

XmlElement node06T = xmlDoc.CreateElement("Rostoq06T-Linha","http://www.dgci.gov.pt/2002/OT");

不幸的是,您必须为您创建的所有孩子指定完整的命名空间!

【讨论】:

  • 这是一个必须发送到葡萄牙财政资源的 XML。你认为在 Rostoq06T-Linha 中有 xmls 属性会影响整个 XML 的验证吗?
  • xmlns 不是属性,它是命名空间定义。在元素上使用不正确的命名空间相当于在元素上使用不正确的本地名称。
  • 谢谢。我已经像在 中一样添加了命名空间,现在,当我保存 xml 文档时,我在 中只有一个命名空间。所有其他空的 xml 命名空间都消失了。我猜是因为编译器看到命名空间已经在一个父节点中,所以他没有添加另一个具有相同值的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多