如何禁用xmlns传播给孩子

时间:2011-06-19 21:43:51

标签: c# xml xml-namespaces

我想从一个XmlElement中分离一些XmlDocument,以便将其插入另一个xmlns。但是当我这样做时,具有命名空间的后代节点会自动附加xmlns属性。由于某种原因,目标xml文件无法通过自定义验证并设置了所有子命名空间。是否可以选择将<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />传播给后代?

以下代码说明了问题 - 执行结果为using System.Xml; class Program { static string xml = @" <mydoc> <one xmlns:MakesMeSick=""http://tempuri.org""> <two> <MakesMeSick:three /> </two> </one> </mydoc> "; static void Main(string[] args) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XmlNode n = doc.SelectSingleNode("/mydoc/one/two"); System.Console.WriteLine(n.InnerXml); } }

{{1}}

2 个答案:

答案 0 :(得分:2)

如果你有一个<prefix:localname>形式的元素,那么你必须在该元素中的某个地方有一个xmlns:prefix="whatever"或一个解释URI prefix地图的祖先至。拥有一个没有关联URI的前缀是没有意义的。

因此,在您的示例中,输出<MakesMeSick:three xmlns:MakesMeSick="http://tempuri.org" />是正确的。如果缺少xmlns,那么它将不是有效的XML文档。

答案 1 :(得分:0)

你的意图不仅仅是复制elemnt,你的意图是转换它:命名空间是XML中元素名称的一部分,就像在C#或Java中一样。因此,您必须使用XPath应用一些手动编码并专注于local name,或者更多涉及的内容甚至可能使用XSLT。