.NET XmlDocument:如何创建没有前缀但带有前缀的命名空间的元素?
.NET XmlDocument: How to create element with no prefix, but namespace with prefix?
我正在使用 .NET 的 XmlDocument class 因为我需要动态编辑 XML 文档。
我正在尝试创建一个如下所示的元素:
<element xmlns:abc="MyNamespace">
这是我目前编写的代码:
XmlDocument xml = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("abc", "MyNamespace");
XmlNode declarationNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(declarationNode);
// Create a root element with a default namespace.
XmlNode rootNode = xml.CreateElement("root", "rootNamespace");
xml.AppendChild(rootNode);
XmlNode containerNode = xml.CreateElement("container", xml.DocumentElement.NamespaceURI);
rootNode.AppendChild(containerNode);
// Create the element node in question:
XmlNode elementNode = xml.CreateElement("element", xml.DocumentElement.NamespaceURI);
XmlAttribute attr = xml.CreateAttribute("abc", "def", nsmgr.LookupNamespace("abc"));
elementNode.Attributes.Append(attr);
containerNode.AppendChild(elementNode);
这是我的输出:
<?xml version="1.0" encoding="UTF-8"?>
<rootNode xmlns="MyNamespace">
<container>
<element abc:def="" xmlns:abc="MyNamespace" />
</container>
</rootNode>
似乎 attribute 属性导致 "abc:def=""" 和 "xmlns:abc="MyNamespace"" 都被设置——我想要的只是后者?
您应该在顶层声明您的命名空间。
请参阅此 post 以获取示例:
How do I add multiple namespaces to the root element with XmlDocument?
这在这里工作
XmlDocument xml = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("abc", "MyNamespace");
XmlNode declarationNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(declarationNode);
// Create a root element with a default namespace.
XmlElement rootNode = xml.CreateElement("root");
rootNode.SetAttribute("xmlns:abc", "MyNamespace");
xml.AppendChild(rootNode);
XmlNode containerNode = xml.CreateElement("container", xml.DocumentElement.NamespaceURI);
rootNode.AppendChild(containerNode);
// Create the element node in question:
XmlNode elementNode = xml.CreateElement("abc", "element", "MyNamespace");
containerNode.AppendChild(elementNode);
Console.Write(rootNode.OuterXml);
输出为
<root xmlns:abc="MyNamespace"><container><abc:element /></container></root>
我正在使用 .NET 的 XmlDocument class 因为我需要动态编辑 XML 文档。
我正在尝试创建一个如下所示的元素:
<element xmlns:abc="MyNamespace">
这是我目前编写的代码:
XmlDocument xml = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("abc", "MyNamespace");
XmlNode declarationNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(declarationNode);
// Create a root element with a default namespace.
XmlNode rootNode = xml.CreateElement("root", "rootNamespace");
xml.AppendChild(rootNode);
XmlNode containerNode = xml.CreateElement("container", xml.DocumentElement.NamespaceURI);
rootNode.AppendChild(containerNode);
// Create the element node in question:
XmlNode elementNode = xml.CreateElement("element", xml.DocumentElement.NamespaceURI);
XmlAttribute attr = xml.CreateAttribute("abc", "def", nsmgr.LookupNamespace("abc"));
elementNode.Attributes.Append(attr);
containerNode.AppendChild(elementNode);
这是我的输出:
<?xml version="1.0" encoding="UTF-8"?>
<rootNode xmlns="MyNamespace">
<container>
<element abc:def="" xmlns:abc="MyNamespace" />
</container>
</rootNode>
似乎 attribute 属性导致 "abc:def=""" 和 "xmlns:abc="MyNamespace"" 都被设置——我想要的只是后者?
您应该在顶层声明您的命名空间。
请参阅此 post 以获取示例: How do I add multiple namespaces to the root element with XmlDocument?
这在这里工作
XmlDocument xml = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("abc", "MyNamespace");
XmlNode declarationNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(declarationNode);
// Create a root element with a default namespace.
XmlElement rootNode = xml.CreateElement("root");
rootNode.SetAttribute("xmlns:abc", "MyNamespace");
xml.AppendChild(rootNode);
XmlNode containerNode = xml.CreateElement("container", xml.DocumentElement.NamespaceURI);
rootNode.AppendChild(containerNode);
// Create the element node in question:
XmlNode elementNode = xml.CreateElement("abc", "element", "MyNamespace");
containerNode.AppendChild(elementNode);
Console.Write(rootNode.OuterXml);
输出为
<root xmlns:abc="MyNamespace"><container><abc:element /></container></root>