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

本文关键字:xmls 元素 属性 XML 创建 | 更新日期: 2023-09-27 18:33:56

以下是我的要求。我正在读取一个 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>

金尔迪帮帮我。感谢您的宝贵时间。

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

使用以下方法更改元素声明,应该可以工作

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

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

原始

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