以下是我的要求。我正在读取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帮助我。 谢谢你宝贵的时间。
答案 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=""
。