我想从一个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}}
答案 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。