【发布时间】:2019-11-28 22:10:57
【问题描述】:
我试图将新的“PropertyGroup”元素添加到以下 XML 文件中
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectGuid>{00AA7ECA-95A0-0000-0000-AD4D2E056BFE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>testnS</RootNamespace>
<AssemblyName>testname</AssemblyName>
<PluginId>4B84E5C0-EC2B-4C0C-8B8E-3FAEB09F74C6</PluginId>
</PropertyGroup>
</Project>
我使用的代码如下(注意还有其他的逻辑被去掉了):
XmlTextReader reader = new XmlTextReader(filename);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
reader.Close();
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlElement root = doc.DocumentElement;
XmlNode refNode = root.SelectSingleNode("x:Project", ns);
root.SelectSingleNode("Project", ns);
XmlElement newElement = doc.CreateElement("PropertyGroup", "http://schemas.microsoft.com/developer/msbuild/2003");
newElement.InnerXml = "<value>test</value>";
root.InsertAfter(newElement, refNode);
doc.Save(filename);
这会在 XML 文档中生成以下新元素:
<PropertyGroup>
<value xmlns="">test</value>
</PropertyGroup>
如何去掉元素上的命名空间声明?
【问题讨论】:
-
这里必须使用 InnerXml 属性吗?明确地做到这一点会更容易。 (如果可以的话,使用 LINQ to XML 会更容易。)
-
不确定 LINQ to XML - LINQ 对我来说是未知数... :-)
-
但是我刚刚发现了这个:stackoverflow.com/questions/2013165/…
-
CreateElement 调用中的命名空间是否绝对必要?