创建具有属性的 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>
金尔迪帮帮我。感谢您的宝贵时间。
使用以下方法更改元素声明,应该可以工作
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=""
。