XmlDocument 创新对象时, 产生 xmlns="" 的解决方案
1. 读取时,应该添加NameSpace.
var exclDef = excl.SelectSingleNode(@"ns:worksheet/ns:sheetData", excl.GetNameSpaceManager("ns"));
public static XmlNamespaceManager GetNameSpaceManager(this XmlDocument xml, string NameSpace)
{
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace(NameSpace, xml.DocumentElement.NamespaceURI);
return nsmgr;
}
2. 如果创建 节点,没有指明 NamespaceURI , 则会生成 xmlns="" , 其原因,参考:
http://blog.tianya.cn/blogger/post_read.asp?BlogID=2524806&PostID=21711977
如果 A\B\C 三级的 NameSpaceURI 分别是 X\Y\Y , 那么, 生成的 A\B\C 的 NameSpaceURI分别是 A\B\空, C 不会生成 NameSpaceURI , 因为, C和其父项具有相同的 NameSpaceURI .
所以在创建 节点时, 为了不出现 NameSpaceURI , 请保持和节点父项相同的 NameSpaceURI .
var si = e.OwnerDocument.CreateElement("si", e.NamespaceURI);
e.AppendChild(si);
另外, 创新 属性时, 不要指定 NameSpaceURI , 即 生成的 Xml 就没有特定的 NameSpaceURI .
var r = excl.CreateAttribute("r");
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |