gpt4 book ai didi

c# - 创建没有命名空间声明的 XML 元素

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:39 29 4
gpt4 key购买 nike

我试图将新的“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>

如何去掉元素上的命名空间声明?

最佳答案

您需要为添加到 DOM 的所有元素指定 XML 命名空间:

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);

XmlElement newElement = doc.CreateElement(
"PropertyGroup",
"http://schemas.microsoft.com/developer/msbuild/2003");
var value = newElement.AppendChild(doc.CreateElement(
"value",
"http://schemas.microsoft.com/developer/msbuild/2003"));
value.AppendChild(doc.CreateTextNode("test"));

root.InsertAfter(newElement, refNode);

如果您不为任何元素这样做(或者如果您像那样使用 InnerXml),该元素将获得可怕的空命名空间。

关于c# - 创建没有命名空间声明的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483346/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com