【发布时间】:2018-01-19 07:09:02
【问题描述】:
创建不带前缀的根节点但显示xmlns:xsi="blah" 的正确方法是什么?基本上我想要这样的东西:
<EDSCrate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EDS_Crate_2010-02-10.xsd" version="0.95">
<Whatever>
</Whatever>
</EDSCrate>
但是,我尝试了很多方法,它不会给我一个没有命名空间的简单节点,即使它给了我属性中的正确xmlns:xsi。
我想避免任何 hack,例如覆盖 ToString 并自己替换 XmlWriter 中的文本。
string uri = "http://www.w3.org/2001/XMLSchema-instance";
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.AppendChild(doc.CreateXmlDeclaration("1.0", "UTF-8", null));
nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("xsi", uri);
XmlElement root = doc.CreateElement("EDSCrate", uri);
// at this point, it already added xmlns="http://www.w3.org/2001/XMLSchema-instance" without me doing anything
root.RemoveAllAttributes();
// but i want xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"!!
root.SetAttribute("xmlns:xsi", uri);
root.SetAttribute("xsi:noNamespaceSchemaLocation", "EDS_Crate_2010-02-10.xsd");
【问题讨论】:
标签: c# xml xml-namespaces xmldocument