使用属性创建XML元素C#有额外的xmls =“”

时间:2014-12-11 17:56:23

标签: c# xml

以下是我的要求。我正在读取xml文件(* .csproj文件)并在其中搜索节点。找到节点后,我会将元素插入其中。 以下是我原来的XML:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
    <ClInclude Include="Stdafx.h" />
    <ClInclude Include="NewFile.h" />
  </ItemGroup>
</Project>

以下是我执行此操作的代码段。

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(inputFile);

        XmlNamespaceManager nsMgr = new XmlNamespaceManager(xDoc.NameTable);
        string strNamespace = xDoc.DocumentElement.NamespaceURI;
        nsMgr.AddNamespace("ns", strNamespace);
        XmlNode root = xDoc.SelectSingleNode("/ns:Project/ns:ItemGroup/ns:ClInclude", nsMgr);

        XmlAttribute attr = xDoc.CreateAttribute("Include");
        attr.Value = "NewHeaderFile.h";

        XmlElement xele = xDoc.CreateElement("ClInclude");
        xele.Attributes.Append(attr);

        root.ParentNode.AppendChild(xele);
        xDoc.Save(outFile);

这是我得到的输出。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ClInclude Include="Stdafx.h" />
    <ClInclude Include="NewFile.h" />
    <ClInclude Include="NewHeaderFile.h" xmlns="" />
  </ItemGroup>
</Project>

问题陈述: 我想忽略输出中的 xmlns =“”。 我的输出应该是这样的。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ClInclude Include="Stdafx.h" />
    <ClInclude Include="NewFile.h" />
    <ClInclude Include="NewHeaderFile.h" />
  </ItemGroup>
</Project>

Kinldy帮助我。 谢谢你宝贵的时间。

2 个答案:

答案 0 :(得分:3)

使用以下内容更改元素声明,并且应该正常工作

XmlElement xele = xDoc.CreateElement("ClInclude", xDoc.DocumentElement.NamespaceURI);

在root上添加名称空间意味着您的元素位于'root' namespace中,因此无需向新元素添加'no namespace'

答案 1 :(得分:3)

原始文档中的所有元素都在名称空间xmlns="http://schemas.microsoft.com/developer/msbuild/2003"中,而您在空名称空间ClInclude中创建新的""元素。如果您还在xmlns="http://schemas.microsoft.com/developer/msbuild/2003"中创建此元素,则输出xml中将省略无关的xmlns=""