C#中用XMLDocument写文件时,去掉XMLNS属性
2010-09-27 16:01
260 查看
当我使用 XMLDocument写GOOGLE的SITEMAP时,遇到了此类问题,在网上搜索后未找到答案,经过思索
成功得出如下方案:
当我们在APPENDCHILD的时候,如果PARENTNODE是带有XMLNS属性的,而你新加的节点,在创建时不指定XMLNS或指定为空时,子节点将出现XMLNS=“”属性,终无法去掉
问题原因:当父节点具有XMLNS属性时,子节点必须指定XMLNS属性,但是当子节点的XMLNS属性与父节点命名空间相同时,子节点不显示XMLNS属性,上面问题的根本所在就是我们理解上的错误,认为我没有为子节点指定命名空间,就不应该出现此属性,恰恰相反,当我们为其指定与父节点相同的命名空间时,此属性才不会出现
错误代码:
XmlNode urlNode = addNode(xmlDoc,rootNode,"url",""); 第三个参数未指定
结果:<url xmlns="">...</url>
正确代码:
XmlNode urlNode = addNode(xmlDoc,rootNode,"url",xmlDoc.DocumentElement.NamespaceURI); 指定第三个参数
结果::<url>...</url>
注意:在url节点下一级,依然要继续指定命名空间,不然在其下一级将出现 xmlns="" 属性
成功得出如下方案:
当我们在APPENDCHILD的时候,如果PARENTNODE是带有XMLNS属性的,而你新加的节点,在创建时不指定XMLNS或指定为空时,子节点将出现XMLNS=“”属性,终无法去掉
问题原因:当父节点具有XMLNS属性时,子节点必须指定XMLNS属性,但是当子节点的XMLNS属性与父节点命名空间相同时,子节点不显示XMLNS属性,上面问题的根本所在就是我们理解上的错误,认为我没有为子节点指定命名空间,就不应该出现此属性,恰恰相反,当我们为其指定与父节点相同的命名空间时,此属性才不会出现
错误代码:
XmlNode urlNode = addNode(xmlDoc,rootNode,"url",""); 第三个参数未指定
结果:<url xmlns="">...</url>
正确代码:
XmlNode urlNode = addNode(xmlDoc,rootNode,"url",xmlDoc.DocumentElement.NamespaceURI); 指定第三个参数
结果::<url>...</url>
注意:在url节点下一级,依然要继续指定命名空间,不然在其下一级将出现 xmlns="" 属性
相关文章推荐
- C#中用XmlDocument对象获取XML文件中的节点值
- Krpano学习:在C#中修改全景场景属性(C#操作全景vtour.xml文件及相关瓦片数据/panos/*.tiles)
- dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性
- C#使用XmlEDocument实现数据文件安全存储功能
- C#中用XmlDocument对象获取XML文件中的节点值
- C#使用XmlEDocument实现数据文件安全存储功能
- [C#]XmlDocument_修改xml文件操作.
- C#中用XmlDocument对象获取带名命空间XML文件的节点值
- dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性
- C#读取含有xmlns的XML文件
- C#XmlDocument无法读取utf-16文件
- dom4j为生成XML的文件添加xmlns属性
- C# 添加xml节点多了xmlns属性问题
- Spring —— web.xml 中用 PropertyPlaceholderConfigurer 类读取properties 文件 或 属性
- C# XML文件的一些操作(XmlDocument、XmlElement、XmlNode)
- C# 加载XML 文件 去掉注释 和命名空间
- C#XmlDocument无法读取utf-16文件
- C#操作Xml的两种方式 XPath XmlDocument XmlNodeList
- xml文件里 padding警告去掉
- c# 如何读取xml节点中的属性(转)