使用XmlWriter和XmlWriter命名空间编写XElement?

时间:2015-07-13 12:19:29

标签: c# .net xml xelement xmlwriter

我有一个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>

1 个答案:

答案 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;
}