我有一个XmlWriter,它已经有一个设置了xmlns
属性的根元素。
我现在有一个XElement(带有很多子元素),没有指定命名空间。
如果我这样做:
xElement.WriteTo(writer);
我以无效的xml结尾:
<MyRootElement xmlns="SomeNameSpace">
<!-- Some elements of this namespace -->
<MyXElementType xmlns="">
<!-- A lot of other Element in the same namespace -->
</MyXelementType>
<!-- Some elements of this namespace -->
</MyRootElement>
因为禁止指定空名称空间。这是有问题的,因为我需要在XSD之后进行验证。
我该怎么做才能结束:
<MyXElementType><!-- HERE, no xmlns !!! -->
<!-- A lot of other Element in the same namespace -->
</MyXelementType>
<!-- Some elements of this namespace -->
</MyRootElement>
答案 0 :(得分:1)
是什么让你觉得它无效? The spec说:
默认名称空间声明中的属性值可以为空。在声明的范围内,这与没有默认命名空间具有相同的效果。
如果要删除它,则需要在编写之前将XElement
及其后代的命名空间设置为与现有根元素相同的命名空间。您可以在创建时执行此操作:
XNamespace ns = "SomeNamespace";
var element = new XElement(ns + "MyXElementType");
或事后:
foreach (var element in element.DescendantsAndSelf())
{
element.Name = ns + element.Name.LocalName;
}